Inhalt eines SWT TreeViewers neu setzen

mdunker

Mitglied
Hallo,

ich benutze einen TreeViewer um einen Baum anzuzeigen. Dieser Baum liegt auf einem Server und wird von dort geladen. Ich habe eine Menge N von Clienten die diesen Baum anzeigen. Wenn einer dieser Clients etwas an dem Baum ändert (irgendwo ein Kind hinzufügt), wird diese Änderung auf dem Server weiter gegeben und alle Clients darüber informiert das es einen Änderung gibt. Darauf hin holen diese sich den Inhalt des Baums neu vom Server (RMI).

Nun habe ich das Problem das mit treeViewer.setInput(baum) auch immer der Expand lvl der Knoten zurückgesetzt wird. Das heisst nur der Wurzelknoten wird angezeigt und alle Kindelemente sind zugeklappt. Das ist natürlich nicht sonderlich praktisch wenn man den Baum betrachtet und er bei jeder Änderung wieder komplett zuklappt. Die Update, bzw. Refresh Methode des TreeViewers kann ich nicht benutzen weil der Inhalt des Baums ja quasi ein anderer ist. Ebendso wenig bringt die Verwendung von get-/setExpandedElements(). Da passiert leider nix.

Kann mir evtl. jemand weiterhelfen und mir sagen wie ich es hin bekomme das die Änderungen zwar angezeigt (sprich: Inhalt neu setzen), aber der aktuelle Expand Lvl beibehalten wird?

Mfg Mirco
 
Hallo, wenn es dir nur um den Level geht, könntest du diesen vor dem Aktualisieren auslesen und nach dem Aktualisieren wieder setzen.
Dafür musst du mit getexpandettreepaths nur alle expandierten pfade auslesen dir mit getsegemtn count nach der größe sortieren. Anhand des größten weißt du dann wie weit der baum ausgeklappt werden muss. Vor dem setInput() rufst du dann noch setAutoexpandLevel() auf. Dabei musst du aber beachten das Level 1 nur der wurzelknoten Level 2 wurzel + 1 .bene usw. musst also höchstwahrscheinlich noch 1dazuaddieren.
 
Zurück