JTree setSelectedPath funktioniert nicht?!

ElJarno

Mitglied
Hi Leute,
habe einen Tree welcher bestimmte Äste ausgeklappt hat und auch bestimmte Elemente selektiert hat. Jetzt wollte ich gern nachdem ich das Model neu geladen habe, also neu gesetzt habe die gleichen Elemente wieder Selektieren und Ausklappen. Hatte gedacht das Überschreiben der HashCode und equals Methoden in der abgeleiteten DefaultMutableTreeNode Klasse würde reichen aber anscheinend müsste ich auch die in der TreeNode überschreiben nur weiß ich nicht wie man diese in die JTree einbettet.

Ne Idee?

Gruß Jan
 
Howdie.

Als ich vor ein paar Jahren einen Explorer geschrieben hab, stand ich vor dem gleichen Problem. Damals hab ich keine Lösung gefunden, wie dem mit JTree-eigenen Mitteln beizukommen ist. Ich habe schließlich die gewünschten (selektierten) Nodes in einer Collection gespeichert und beim Reload des Models neu selektiert und ausgeklappt. Vielleicht gibts da inzwischen auch schönere Lösungen, aber es ist eine Option.

@TreeNode überschreiben:
TreeNode ist ein Interface, also kannst du die Methoden nicht überschreiben, sondern nur implementieren. DefaultMutableTreeNodes implementieren dieses Interface und bedienen die entsprechend geforderten Methoden bereits. Also was auch immer du genau damit erreichen willst, wenn du in deiner abgeleiteten Klasse bereits equals() und hashCode() überschrieben hast, hast du das damit auch im TreeNode getan.
 
Ich habe schließlich die gewünschten (selektierten) Nodes in einer Collection gespeichert und beim Reload des Models neu selektiert und ausgeklappt. Vielleicht gibts da inzwischen auch schönere Lösungen, aber es ist eine Option.
Hm, hatte ich auch schon überlegt aber durch den ganzen Baum zu itarieren find ich ein bisschen unperformant und kompliziert. Aber ich lass das ganz erst mal raus, wenns nicht anders geht werd ich es so machen.

Also was auch immer du genau damit erreichen willst, wenn du in deiner abgeleiteten Klasse bereits equals() und hashCode() überschrieben hast, hast du das damit auch im TreeNode getan
Es geht ja auch um TreePath und nicht um TreeNode das ja expand sich auf TreePath oder einen Index bezieht.

Gruß Jan
 
Erstmal: Du hattest im ersten Post TreeNode geschrieben, daher bin ich da überhaupt drauf eingegangen....

Also iteriert habe ich bei der Reselektion nichts. Wenn du einen DefaultMutableTreeNode hast, kannst du über die Methode getPath() den Objekt-Pfad auslesen in Form eines Object-Array. Hiermit kannst du einfach ein TreePath-Objekt erzeugen. Konkret:
Java:
TreePath p = new TreePath(myNode.getPath());
Damit kannst du recht einfach wieder selektieren und ein/ausklappen.

Genau kann ichs dir nicht sagen, da ich den Code momentan nicht mehr vorliegen habe. Ich finds auch nicht die schönste Lösung, aber in der Not...

Gruß und viel Erfolg
miffi

///// edit
Sorry, ich Depp hab grad zum ersten Mal den Titel deines Threads bewusst gelesen. Daher geh ich mal davon aus, dass ich dir hier nichts Neues erzähle die ganze Zeit. Jetzt macht auch die Aussage mit hashCode() und equals() Sinn :p

Hab jetzt grad nochmal mein Explorer-Projekt rausgekramt. Und da funktioniert setSelectionPath() auch nach einem Reload des Models. Bei mir werden allerdings auch die selben (Daten-)Objekte benutzt wie vor dem Reload. Kann es sein, dass du im Model komplett neue Objekte erzeugst? Dann stimmen die vom Objekt bereits implementierten hashCode()-, equals()- und toString()-Methoden natürlich nicht mehr...
 
Zuletzt bearbeitet:
Ja ich erzeuge neue Objekte aber auch dort überschreibe ich schon die genannten Methoden, da diese Vorgehen öfters vorkommt. So funktionieren dann halt immer noch die ComboBoxen zum Beispiel. Bisher hatte das alles wunderbar funktioniert nur stellt sich halt das TreeModel hier etwas quer.
 
Zurück