Hallo Leute,
ich habe ein (relativ) komplexes Problem mit den Nodes meines JTrees. Ich verwende für den Baum eigentlich nur die Swing-Standardkomponenten, lediglich den CellRenderer habe ich ausgewechselt. Als Nodes verwende ich DefaultMutableTreeNodes, die jeweils ein UserObject tragen - insofern nichts Besonderes.
Die Benutzer meines Programms können jederzeit auf einen "Refresh Tree"-Button klicken. Daraufhin wird der Baum geleert und die Nodes werden neu eingefügt. Das funktioniert soweit wunderbar. Jetzt kommt allerdings der schwierige Teil. Und zwar wird der gesamte Tree beim refreshen eingeklappt sodass nur mehr der Root-Knoten sichtbar ist.
Ich möchte nun eine Methode schreiben, die - ausgehend von der Wurzel - ausschließlich alle jene Nodes ausklappt, deren UserObject eine bestimmte Bedingung erfüllen. Sollte die Bedingung erfüllt sein, soll der Knoten ausgeklappt werden und das Prozedere wird (rekursiv) für alle Kinder des Knotens wiederholt. Sollte der Knoten die Bedingung nicht erfüllen, soll er eingeklappt bleiben und seine Kinder sollen gar nicht erst betrachtet werden.
Mein bisheriger Versuch sah es vor, einen TreePath bis zu jedem oben beschriebenen Knoten aufzubauen (per wiederholtem Aufruf von path.pathByAddingChild(...)) und dann beim JTree selbst die Methode expandPath(...) für jeden dieser Pfade aufzurufen. Allerdings scheint das willkürlich je nach Struktur des Baumes manchmal zu funktionieren und manchmal nicht...
Das Einfachste wäre es, wenn man beim Erstellen einer DefaultMutableTreeNode im Konstruktor per Boolean angeben könnte, ob die Node defaultmäßig collapsed oder expanded sein soll, aber in der Java-API habe ich nichts dergleichen finden können. Wie würdet ihr vorgehen? Irgendeinen Tip?
Gruß,
Alan
ich habe ein (relativ) komplexes Problem mit den Nodes meines JTrees. Ich verwende für den Baum eigentlich nur die Swing-Standardkomponenten, lediglich den CellRenderer habe ich ausgewechselt. Als Nodes verwende ich DefaultMutableTreeNodes, die jeweils ein UserObject tragen - insofern nichts Besonderes.
Die Benutzer meines Programms können jederzeit auf einen "Refresh Tree"-Button klicken. Daraufhin wird der Baum geleert und die Nodes werden neu eingefügt. Das funktioniert soweit wunderbar. Jetzt kommt allerdings der schwierige Teil. Und zwar wird der gesamte Tree beim refreshen eingeklappt sodass nur mehr der Root-Knoten sichtbar ist.
Ich möchte nun eine Methode schreiben, die - ausgehend von der Wurzel - ausschließlich alle jene Nodes ausklappt, deren UserObject eine bestimmte Bedingung erfüllen. Sollte die Bedingung erfüllt sein, soll der Knoten ausgeklappt werden und das Prozedere wird (rekursiv) für alle Kinder des Knotens wiederholt. Sollte der Knoten die Bedingung nicht erfüllen, soll er eingeklappt bleiben und seine Kinder sollen gar nicht erst betrachtet werden.
Mein bisheriger Versuch sah es vor, einen TreePath bis zu jedem oben beschriebenen Knoten aufzubauen (per wiederholtem Aufruf von path.pathByAddingChild(...)) und dann beim JTree selbst die Methode expandPath(...) für jeden dieser Pfade aufzurufen. Allerdings scheint das willkürlich je nach Struktur des Baumes manchmal zu funktionieren und manchmal nicht...
Das Einfachste wäre es, wenn man beim Erstellen einer DefaultMutableTreeNode im Konstruktor per Boolean angeben könnte, ob die Node defaultmäßig collapsed oder expanded sein soll, aber in der Java-API habe ich nichts dergleichen finden können. Wie würdet ihr vorgehen? Irgendeinen Tip?
Gruß,
Alan