Knoten/Blatt im JTree selektieren

the_skywalker

Mitglied
Hallo zusammen,

ich bin gerade dabei einen JTree dynamisch zu generieren, d.h. bei Eingabe eines Strings in ein Textfeld wird in einer Datenbank nach diesem String gesucht und durch entsprechende Verknüpfungen wird ein sog. Seriennummer-Strukturbaum ausgegeben. Das funktioniert alles wunderbar. Jetzt soll aber beim Erscheinen des Baumes der eingegebene String selektiert sein und der dazugehörige Pfad soll auch geöffnet werden. Das öffnen des Pfades habe ich erst einmal so geregelt, dass der gesamte Baum expandiert wird. Das reicht mir für den Anfang. Jedoch das selektieren bekomme ich einfach nicht hin. Hat jamand von Euch eine Idee? Ich würde mich jedenfalls rießig freuen.

Vielen Dank.

Stefan
 
1. Selektion beim Ändern des Baumes:

TreeModelListener, treeNodesInserted(TreeModelEvent e)

- über TreeModelEvent bekommst Du den TreePath
- Selektion des TreePaths direkt über den JTree:

JTree, setSelectionPath(TreePath path)

2. automatisches Öffnen von selektierten TreePath:

JTree, setExpandsSelectedPaths(true)
 
Also ich bekomme das immer noch nicht hin.

Gibt es denn keine Möglichkeit beim Start der Anwendung, in welcher sich der JTree befindet, einen bestimmten Knoten zu selektieren? Vorher weiss ich nicht, wo sich der Knoten befindet. Oder ob sich um einen Knoten oder gar um ein Blatt handelt. Ich weiss nur wie er heisst. Kann anhand dieses Names eine Selektion erfolgen oder benötige ich mehr Informationen?

Kann man einen Baum so durchsuchen, das der Name eines Blattes/Knotens eingegeben wird und anhand daran der gesamte Pfad ausgegeben wird?

Bsp.: root --> node1 ---> node2 ---> child1

  • suche in dem Baum nach "child"
  • gebe als "antwort" den gesamten pfad zurück
Hat jemand eine Idee?

Thanks
 
Wie die Knoten aufgebaut sind, kannst Du das nur mit rekursiven Methodenaufrufen herausfinden.

Code:
private TreeNode[] getFoundPath(DefaultMutableTreeNode tn, String name) {
TreeNode[] atn;
DefaultMutableTreeNode tnTemp;
Enumeration enum = tn.children();
while (enum.hasMoreElements()) {
	tnTemp = (DefaultMutableTreeNode)enum.nextElement();
	if (name.equals(tnTemp.getUserObject())) {
	 return tnTemp.getPath();
	}
	atn = getFoundPath(tnTemp, name);
	if (atn == null) continue;
	return atn;
}
return null;
}
So in etwas sollte das funktionieren.
 
Zuletzt bearbeitet:
Zurück