2010-10-07 7 views
5

Ich arbeite mit JTree.Speicherstatus/erweiterte Knoten eines jtree für die Wiederherstellung des Status

Ich würde gerne wissen, was ist der beste Weg zu wissen, welche Knoten in einem JTree erweitert werden, um seinen Zustand zu speichern (d. H. Speichern Sie alle erweiterten Pfade). Also, wenn ich model.reload() aufrufen würde der Jtree nicht zusammengebrochen bleiben, aber ich werde in der Lage sein, seinen ursprünglichen Zustand für den Benutzer wiederherzustellen, d.h. alle expandierten Knoten werden erweitert.

Antwort

8

Santosh Kumar ist einer meiner Favoriten für Swing Hacks.

Antwort: http://www.javalobby.org/java/forums/t19857.html

+1

Herr Kumar ist kein Hacker, er ist ein Retter. Wenn er auf SO wäre, würde mein Vertreter bei -13 stecken bleiben. –

0

Ich bin neu in Java und das trieb mich Nüsse als auch. Aber ich habe es herausgefunden ... denke ich. Unten funktioniert in meiner App gut, aber ich denke, es hat ein gewisses Risiko, unter ungewöhnlichen Umständen nicht wie erwartet zu arbeiten.

1

Sie müssen die expandierten TreePaths speichern und nach dem erneuten Laden des TreeModels erneut expandieren. Alle TreePaths mit einem Nachkommen werden als erweitert betrachtet. P.S. Wenn Sie Pfade gelöscht haben, überprüfen Sie nach dem Neuladen, ob der Pfad noch verfügbar ist.

public void reloadTree(JTree jYourTree) { 
    List<TreePath> expanded = new ArrayList<>(); 
    for (int i = 0; i < jYourTree.getRowCount() - 1; i++) { 
     TreePath currPath = getPathForRow(i); 
     TreePath nextPath = getPathForRow(i + 1); 
     if (currPath.isDescendant(nextPath)) { 
      expanded.add(currPath); 
     } 
    } 
    ((DefaultTreeModel)jYourTree.getModel()).reload(); 
    for (TreePath path : expanded) { 
     jYourTree.expandPath(path); 
    } 
}