Wie lassen sich eigene Icons für einen JTree erstellen?
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.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
public class CustomTreeIcons {
public CustomTreeIcons(){
JFrame frame = new JFrame("Custom Tree Icons");
frame.setLayout(new GridLayout(1,1));
frame.add(initTree());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JTree 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());
return tree;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> 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;
}
}
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.