Возможно, если вы используете «nodeChanged()» вместо «reload()», вы получите желаемый эффект.
В классе DefaultTreeModel есть множество методов, которые вызывают изменение и перерисовку различных частей дерева. Существуют также другие методы DefaultTreeModel, которые вызывают только перерисовку.
Вы упомянули «перезагрузку (узел)» и отметили, что это приводит к краху дерева, когда вы его вызываете. 'reload' приводит к полной перерисовке всего поддерева, начиная с этого узла. (Но если этот узел не виден, он ничего не меняет.) Это называется «изменением структуры».
'insertNodeInto()' и 'removeNodeFromParent()' изменяют древовидную структуру, добавляя или удаляя узел, а затем перерисовывая.
Я думаю, что «nodeChanged()» — это тот, который вам нужен, поскольку он просто уведомляет модель о том, что что-то изменилось в узле, что приведет к другому отображению. Возможно, отображаемый текст теперь отличается от прежнего. Возможно, вы изменили пользовательский объект в узле. Это когда вы вызываете «nodeChanged()» на узле.
Вам следует попробовать 'nodeChanged()' вместо вызова 'reload()' в вашем собственном коде, который рушился, и в предоставленном примере программы vels4j. Это может решить проблему.
Обратите внимание, что в DefaultTreeModel есть также два других семейства методов, которые используются в других случаях:
Эти методы работают с узлами дерева и используют путь дерева, чтобы определить, где произошло изменение. Они не изменяют структуры данных, лежащие в основе дерева, но уведомляют модель о том, что что-то изменилось, чтобы она могла уведомить слушателей, которые фактически перерисовывают вещи или иным образом реагируют на изменения.
nodesWereInserted()
nodesWereRemovde()
nodesChanged()
nodeStructureChanged()
Существует также набор методов fire...()
, которые используются внутри DefaultTreeModel и любых подклассов, которые вы можете создать. Они просто уведомляют любых слушателей, что что-то изменилось. Обратите внимание, что они защищены.
person
Lee Meador
schedule
21.01.2013
DefaultTreeModel.reload()
для модели моегоJTree
, узлы рушатся, как я могу обновить конкретный узел, не разрушив ни один из других узлов с дочерними элементами? - person David B   schedule 06.09.2012treeStructureChanged()
вместоtreeNodesChanged()
. Подробнее см. в этом ответе, особенно в его последней части, с примерами изменения узла. Но я не работал сDefaultXXX
материалом. В любом случае, покажите нам свой код. - person Dmitry Frank   schedule 20.01.2013