//: c13:Trees.java // Przykład z książki 'Thinking in Java, wydanie 2.', autor - Bruce Eckel // www.BruceEckel.com // Patrz informacje o prawach autorskich podane w pliku CopyRight.txt. // Prosty przykład drzewa Swing. Drzewa są // przeważnie o wiele bardziej złożone. // <applet code=Trees // width=250 height=250></applet> import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; import com.bruceeckel.swing.*; // Przyjmuje tablicę łańcuchów tekstowych i z pierwszego // elementu robi wierzchołek a z pozostałych liście: class Branch { DefaultMutableTreeNode r; public Branch(String[] data) { r = new DefaultMutableTreeNode(data[0]); for(int i = 1; i < data.length; i++) r.add(new DefaultMutableTreeNode(data[i])); } public DefaultMutableTreeNode node() { return r; } } public class Trees extends JApplet { String[][] data = { { "Kolor", "Czerwony", "Niebieski", "Zielony" }, { "Smak", "Cierpki", "Słodki", "Mdły" }, { "Długość", "Krótki", "Średni", "Długi" }, { "Głośność", "Wysoka", "Średnia", "Niska" }, { "Tempereatura", "Wysoka", "Średnia", "Niska" }, { "Intensywność", "Wysoka", "Średnia", "Niska" }, }; static int i = 0; DefaultMutableTreeNode root, child, chosen; JTree tree; DefaultTreeModel model; public void init() { Container cp = getContentPane(); root = new DefaultMutableTreeNode("korzeń"); tree = new JTree(root); // Dodaj suwak aby zajął się przesuwaniem: cp.add(new JScrollPane(tree), BorderLayout.CENTER); // Przechwyć model drzewa: model =(DefaultTreeModel)tree.getModel(); JButton test = new JButton("Naciśnij mnie"); test.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ if(i < data.length) { child = new Branch(data[i++]).node(); // Co zostało ostatnio wybrane? chosen = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(chosen == null) chosen = root; // Model stworzy odpowiednie zdarzenie. // W odpowiedzi drzewo ma się uaktualnić: model.insertNodeInto(child, chosen, 0); // Tutaj wstawiany jest nowy wierzchołek // do wierzchołka aktualnie wybranego. } } }); // Zmiana koloru przycisku: test.setBackground(Color.blue); test.setForeground(Color.white); JPanel p = new JPanel(); p.add(test); cp.add(p, BorderLayout.SOUTH); } public static void main(String[] args) { Console.run(new Trees(), 250, 250); } } ///:~