Я реализовал дерево с помощью отложенной загрузки. Узлы 1-го уровня создаются во время создания дерева, тогда как дочерние узлы создаются только тогда, когда пользователь расширяет какой-либо конкретный узел.
Данные поступают из БД, и мы запускаем запрос к базе данных, чтобы заполнить дочерние узлы. Реализован TreeExpansionListener и использование переопределенной реализации метода treeExpanded. При расширении я удаляю все дочерние узлы для выбранного узла, делаю запрос к БД и добавляю записи как дочерние к выбранному узлу. Перед добавлением любого узла в дерево к узлу добавляется фиктивный дочерний элемент. Работа с DefaultMutableTreeNode.
Пока все хорошо, все работало нормально, как и ожидалось.
Проблема 1. Как вы, это вызов БД для каждого расширения, поэтому, если узел свернут и снова расширится, я буду выполнять поездку по БД и снова обрабатывать снова... Идея состоит в том, чтобы не загружать узлы свежими, если они уже расширены ...
Проблема 2. Если бы мне пришлось принудительно обновить, то есть перезагрузить дерево и сохранить состояние расширения. Сейчас это в рабочем состоянии ... Как я могу добиться того же, а также исправить проблему 1 выше?
Ценим любую помощь в этом.