PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : in JTree suchen?



lousypoetry
25-11-2005, 11:36
Hi,

ich hab einen JTree mit einem DefaultTreeModel. In dem Baum befi[/CODE]nden sich jetzt Knoten mit wiederum Kindknoten. Gibt es eine vordefinierte Funktion zum Suchen innerhalb dieses Baumes?

Hab versucht, selbst eine zu schreiben, komm aber nicht weiter:



private void findNode(String node) {

DefaultNode tmp = (DefaultNode) treeModel.getRoot();

// so noch nicht richtig, nur mal ganz ganz grob
while(tmp != null) {
if(tmp.getNodeValue().equals(node)) {
System.out.println("found!");
}
else {
tmp = (DefaultNode) tmp.getFirstChild();
}
}
}


Das Problem ist eine ClassCastException in der ersten Zeile, das scheint so also nicht zu funktionieren. Hat jemand von euch da eine Idee? Danke!

`kk
25-11-2005, 13:07
Hallo.
Ich schaetze mal, DefaultNode wird abstrakt sein.
Nimm doch mal TreeNode.

Gruß
Kai

lousypoetry
25-11-2005, 14:04
Das ist ne gute Idee, jetzt klappt es!

Hätte aber noch eine Frage: jetzt hab ich meinen Knoten gesucht (und gefunden) und möchte nun, dass er selektiert bzw. markiert wird. Am günstigsten scheint mit das mit setSelectionPath() zu funktionieren. Aber: wie komme ich nun von meinem gefundenen Knoten an der TreePath?
Angenommen mein gesuchter Knoten ist ein DefaultMutableTreeNode mit dem Namen "tmp", tmp.getPath() liefert mir ein Array von TreeNodes zurück, kann ich aus diesem Array jetzt irgendwie einen TreePath erstellen, sodass ich setSelectionPath() benutzen kann?

`kk
26-11-2005, 19:55
Hallo poetry.
Also ich hab das jetzt auch mit dem SelectionModel getestet, aber das scheint doch sehr kompliziert zu sein.

Es geht ganz einfach mit JTree.setSelectionRow().

Gruß
Kai

PS:
Die Suchfunktion habe ich so gemacht:


private int findNode(String nodeName)
{
TreeNode root = (TreeNode)jtree.getModel().getRoot();

for (int i = 0; i < root.getChildCount(); ++i) {
TreeNode child = root.getChildAt(i);

if (child.toString().equals(nodeName)) {
return i;
}
}

return -1;
}