хранить состояние / расширенные узлы jtree для восстановления состояния - PullRequest
6 голосов
/ 07 октября 2010

Я работаю с JTree.

Я хотел бы знать, как лучше узнать, какие узлы раскрываются в JTree, чтобы сохранить его состояние (т. Е. Сохранить все развернутые пути). Так что, если я вызову model.reload(), Jtree не останется свернутым, но я смогу восстановить его исходное состояние для пользователя, то есть все развернутые узлы будут развернуты.

Ответы [ 3 ]

8 голосов
/ 07 октября 2010

Сантош Кумар - один из моих парней в Swing Hacks.

Ответ: http://www.javalobby.org/java/forums/t19857.html

1 голос
/ 20 января 2017

Вам необходимо сохранить развернутые TreePath и снова развернуть их после перезагрузки TreeModel.Все TreePath, имеющие потомка, считаются развернутыми.PS если вы удалили пути, проверьте после перезагрузки, если путь все еще доступен.

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);
    }
}
0 голосов
/ 10 июля 2014

Я новичок в Java, и это тоже сводило меня с ума.Но я понял это ... я думаю.Приведенное ниже отлично работает в моем приложении, но я думаю, что в некоторых необычных ситуациях оно может работать некорректно

...