Ich möchte meine JTree dynamisch durch eine benutzerinitiierte Suche (über Elemente der Struktur) aktualisiert werden. Von der Ausgabe auf der Konsole kann ich sagen, dass die Suche so funktioniert, wie sie sollte. Das Problem besteht darin, den Baum zu aktualisieren.Dynamic JTree aktualisiert von KeyListener in einem JTextField
Hier ist was ich habe. Ich habe eine Reihe von Klassen wie
public class classA {
int id;
String name;
List<ClassB> listOfClassB;
}
public class classB {
int id;
String name;
List<ClassC> listOfClassC;
}
public class classC {
int id;
String name;
}
Aus diesen Klassen I durch Looping throught die Klassen Listen in createTree eine JTree erzeugen().
private DefaultMutableTreeNode rootNode;
rootNode = createTree("New", ""); // "New" tells the method to generate the complete tree
treeModel = new DefaultTreeModel(rootNode);
JTree myTree = new JTree(treeModel);
So weit so gut. Jetzt möchte ich den Baum nach einem String oder Int in classC.name oder classC.id durchsuchen und alle Knoten entfernen, die nicht mit den Suchkriterien übereinstimmen. Aber nicht die Objekte, nur die entsprechenden Baumknoten. Wenn der Benutzer mit der Suche fertig ist, kann ich den gesamten Baum wieder anzeigen.
Die Suche wird mit JTextField und einem KeyListener durchgeführt, der createTree aufruft (searchOption, searchText).
Bis jetzt habe ich versucht, alle Knoten mit removeAllChildren() zu entfernen und dann neue Knoten hinzufügen, die den Suchkriterien entsprechen. Späteres Nachladen des TreeModels scheint hier nicht zu funktionieren.
createTree(searchOption, searchText);
rootNode.removeAllChildren();
treeModel.reload(rootNode);
Irgendwelche Ideen, wie ich das erreichen könnte?
PS: Ich entschied mich, den Baum zu löschen und einen neuen zu generieren, um zu vermeiden, dass der Baum und die Daten synchron bleiben, weil es viel komplizierter erscheint.
Danke für den Tipp mit dem DocumentListener. Das Zurücksetzen des Modells funktionierte nicht. Ich habe die gefundene Lösung gepostet. – JKB