tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
384
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    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
     

  2. #2
    Avatar von miffi
    miffi miffi ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Ravensburg (BW)
    Beiträge
    139
    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.
     
    "A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
    Douglas Adams

  3. #3
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Zitat Zitat von miffi Beitrag anzeigen
    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.

    Zitat Zitat von miffi Beitrag anzeigen
    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
     

  4. #4
    Avatar von miffi
    miffi miffi ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Ravensburg (BW)
    Beiträge
    139
    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:
    Code java:
    1
    
    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...
    Geändert von miffi (11.10.10 um 15:11 Uhr)
     
    "A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
    Douglas Adams

  5. #5
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    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.
     

Ähnliche Themen

  1. Jtree nicht sichtbar im Browser
    Von TriipaxX im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 06.01.10, 02:55
  2. JTree Fehler den ich nicht finde
    Von skizZ im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 14.06.09, 19:00
  3. JTree aktualisiert nicht
    Von LosPaFFos im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 05.12.07, 20:19
  4. Antworten: 1
    Letzter Beitrag: 15.01.07, 15:58
  5. Funktion IE/Firefox - funktioniert/funktioniert nicht
    Von SixDark im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 02.03.06, 00:26