Ein eigenes TreeModel schreiben
TreeModels enthalten die Daten, die ein JTree
darstellen soll. In diesem Artikel werden wir uns damit befassen, wie man Schritt für Schritt ein eigenes dynamisches TreeModel
aufbaut. Nach der Lektüre dieses Artikels sollte der Leser in der Lage sein, selbstständig eigene TreeModels zu entwickeln.
Inhaltsverzeichnis
Überblick
Damit der JTree das darzustellende Datenformat verstehen kann, muss dieses einem entsprechenden Standard genügen. Den kleinsten gemeinsamen Nenner bildet hier das TreeModel
.
Im Gegensatz zu JTable
existiert für den JTree keine abstrakte Standardimplementierung seines Datenmodells. JTable bietet hier die Klasse AbstractTableModel
welche das Interface TableModel
implementiert an. Diese Klasse enthält bereits eine einfache Verarbeitung von TableModelEvent
s, reagiert also auf Veränderungen im TableModel. AbstractTableModel wird schließlich von DefaultTableModel
beerbt, mit dem Tabellen mit Standard-Datentypen wie bspw. Integer
, Double
, Float
, Boolean
, String
, Icon
erzeugt werden können. Mehr zu all dem im großen JTable (Tutorial)©.
Eine vergleichbare Klasse AbstractTreeModel gibt es in der Java-API nicht. Für eigene baumartig strukturierte Datentypen muss hier ein eigenes TreeModel geschrieben werden. Mit DefaultTreeModel
gibt es schon eine Standardimplementierung eines TreeModels. Die Daten des Baums werden mit Hilfe von Objekten, die das Interface TreeNode
implementieren, dargestellt. Veränderbare Daten erfordern den Einsatz von MutableTreeNode
. Eine Standardimplementierung wird bereits mit DefaultMutableTreeNode
von der Java-API mitgeliefert. Mehr dazu im großen JTree (Tutorial)©.
Das Interface TreeModel
Das Interface TreeModel
schreibt Methoden vor, die eine Klasse implementieren muss, wenn ein JTree
die in ihr enthaltenen Daten grafisch darstellen können soll.
public interface TreeModel {
void addTreeModelListener(TreeModelListener l);
Object getChild(Object parent, int index);
int getChildCount(Object parent);
int getIndexOfChild(Object parent, Object child);
Object getRoot();
boolean isLeaf(Object node);
void removeTreeModelListener(TreeModelListener l);
void valueForPathChanged(TreePath path, Object newValue);
}
TreeModel implementieren
Nehmen wir an, wir hätten bereits eine eigene Datenstruktur, die wir im JTree präsentieren wollen.
Um ein eigenes TreeModel zun implementieren, müssen wir nun also erstmal das TreeModel
-Interface implementieren und damit alle von ihm vorgeschriebenen Methoden überschreiben:
public MyTreeModel implements TreeModel {
public Object getChild(Object parent, int index) {
}
public int getChildCount(Object parent) {
}
public int getIndexOfChild(Object parent, Object child) {
}
public Object getRoot() {
}
public boolean isLeaf(Object node) {
}
public void removeTreeModelListener(TreeModelListener l) {
}
public void addTreeModelListener(TreeModelListener l) {
}
public void valueForPathChanged(TreePath path, Object newValue) {
}
}
Ein Konstruktor für unser TreeModel
Dieser Beitrag wird derzeit noch bearbeitet. Der Text ist deshalb unvollständig und kann Fehler oder ungeprüfte Aussagen enthalten. |