Das Beispiel definiert einen einfachen JFrame, der als einzige
Komponente einen JTree enthält. Die Routinen zum Erstellen und
Hinzufügen des Baumes enthält die MethodeinitTree(). Hier wird
zuerst ein Wurzelknoten deklariert, dem zwei Blätter hinzugefügt werden. Der
Inhalt des Baumes wird durch ein Model vom Typ DefaultTreeModel
verwaltet, das durch Übergabe des Wurzelknotens an den Konstruktor gebildet
wird. Mit diesem wird schließlich der eigentliche Baum erstellt.
Der JTree
erhält nun einen TreeCellRenderer, der für die Definition der
Baum-Icons zuständig ist. Die Klasse erweitert DefaultTreeCellRenderer
und erhält außer dem Konstruktor nur eine Methode zum Laden der
Icon-Dateien. Mit deren Hilfe werden drei Felder initialisiert (openIcon,
closedIcon und leafIcon), die von der Elternklasse zur
Verfügung gestellt werden. Den Rest erledigt der Renderer von selbst.
import java.awt.GridLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
public class CustomTreeIcons extends JFrame {
public CustomTreeIcons(){
this.setLayout(new GridLayout(1,1));
initTree();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 300);
this.setLocationRelativeTo(null);
this.setTitle("Custom Tree Icons");
this.setVisible(true);
}
private void initTree(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
root.add(new DefaultMutableTreeNode("Blatt 1"));
root.add(new DefaultMutableTreeNode("Blatt 2"));
DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);
tree.setCellRenderer(new MyCellRenderer());
this.add(tree);
}
public static void main(String[] args) {
new CustomTreeIcons();
}
}
class MyCellRenderer extends DefaultTreeCellRenderer {
public MyCellRenderer(){
openIcon = createImageIcon("img/open.png");
closedIcon = createImageIcon("img/closed.png");
leafIcon = createImageIcon("img/leaf.png");
}
protected ImageIcon createImageIcon(String path) {
java.net.URL imgURL = getClass().getClassLoader().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
}
System.err.println(path + " nicht gefunden!");
return null;
}
}