//: 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);
}
} ///:~