JTree reload will nicht so wie ich will.

Status
Nicht offen für weitere Antworten.

Fantatier

Mitglied
Ich habe in meinem Program folgende Methode definiert, die den JTree bei änderung aktualisieren soll, und den jTree3 aus der Gui mit meinem überschreibt.
Wenn ich meine Anwendung starte läuft die Methode auch problemlos durch, doch wenn ich bei Laufzeit ein element hinzufüge und die Methode aufrufe, wird zwar die for-Schleife richtig durchlaufen (also einmal mehr als vorher) jedoch werden die änderungen nicht angezeigt, sondern erst nachdem ich in den jTree hineincklicke.
Jetzt weiß ich das reload() die jTree anzeige eignentlich aktualisieren sollte, jedoch wenn ich sie "entkommentiere" wird der tree nicht mehr als expanded angezeigt, egal ob ich vor der for-Schleife reloade oder danach.

Ich wäre für nen Hint sehr dankbar, da ich jetzt schon einige Zeit versuche meine Anzeige bei Laufzeit automatisch zu aktualisieren.
Code:
   private void TreeErsetzen(){
        
        myTree = new OBDComponentManagerTree(rootNode);
        ComponentManagerModel = new DefaultTreeModel(rootNode);
        myTree.setModel(ComponentManagerModel);
        myTree.setRootVisible(false);
        myTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        
        
        render = new OBDComponentManagerTreeRenderer();
        myTree.setCellRenderer(render);
        for (int i = 0; i < myTree.getRowCount(); i++) {
            myTree.expandRow(i);
            System.out.println("row "+i+" expanded");
        }
        //ComponentManagerModel.reload();
        jTree3 = myTree;
    }
 
Was soll das Ersetzen des JTree bewirken?

Wenn es darum geht zur Laufzeit die Daten zu ändern hast du zwei Möglichkeiten:

1. Die Holzhammermethode
Bei dieser liest du die Daten komplett neu ein und erzeugst mit ihnen ein neues TreeModel. Das neue TreeModel schaltest du dann in dem gewünschten JTree über dessen #setModel Methode "scharf".

2. Die elegente Methode
Du änderst dein Model dahingehend ab, dass es alle seine registrierten TreeModelListener (wie z.B. JTree einer ist) über Änderungen in deinen Daten korrekt informierst. Wie das für die entsprechenden Fälle funktioniert, findest du über die Suchfunktion hier im Forum. Jedenfalls erinnere ich mich gut das hier mehrmals in Länge durchgekaut zu haben.

Alles andere ist Schmu. 😉
 
Das mit dem ersetzten hat den Hintergund das ich mit dem visual Editor von Netbeans arbeit und ich im Quellcode selber nichts ändern darf muss ich ein wenig mit workarrounds arbeiten.
Das mit den beiden Methoden ist mir durchaus bewusst, und hier am Anfang zum testen wollte ich ja erstmal die Holzhammer Methode verwenden, darum auch komplett reload() und nicht nur einen bestimmten Pfad reloaden, sobald ich es generell mit reload zum laufen bekommen habe werde ich mich darum kümmern das ich es etwas eleganter mache.
aber ich will das es erstmal überhaupt funktioniert.
Ganz ehrlich glaube ich nicht das du meinen Thread überhaupt gelesen hast, oder wenn ja dann hast du mein Problem nicht verstanden, in dem Fall werde ich es gerne weiter ausbreiten aber bitte sag das dann.
 
Fantatier hat gesagt.:
Das mit dem ersetzten hat den Hintergund das ich mit dem visual Editor von Netbeans arbeit und ich im Quellcode selber nichts ändern darf muss ich ein wenig mit workarrounds arbeiten.

In dem generierten Code musst du auch nichts ändern.

Wie ich bereits schrieb. Du musst nur das neue Model setzen und fertig ist die Laube. Die Anzeige aktualisiert der JTree dann automatisch. Da musst du keinen neuen Tree erzeugen und irgendwas türken...
 
Ok, bestes, es funktioniert jetzt genau wie es sollte.
Hab da wohl ein wenig was verpeilt 😳
Alle myTree mit jTree3 ersetzten und es macht was es machen soll 🙂
Also nochmal besten dank. :toll:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben