Как обновить элементы JTree - PullRequest
1 голос
/ 28 апреля 2010

Я использую JTree с TreeNode, который расширяет DefaultMutableTreeNode. Когда я добавляю новый узел, я не могу обновить JTree. Любая помощь будет оценена

Ответы [ 5 ]

6 голосов
/ 20 января 2011

На самом деле, достаточно перезагрузить родительский узел. Внутренне

public void reload()

использует

public void reload(TreeNode node)

, но с параметром root в качестве его параметра, поэтому, если вы не обновляете лист прямого корня, вам лучше использовать более детальную версию.

6 голосов
/ 08 июля 2010

если вы используете DefaultTreeModel, попробуйте вызвать его reload() метод.

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.reload();

//or... model.reload(nodeUpdatedByYou);

Никогда не используйте tree.updateUI(), так как это операция внешнего вида (хотя она работает).

5 голосов
/ 28 апреля 2010

Добавление только к узлу недостаточно, дерево должно быть уведомлено. Правильный способ сделать это - позволить модели позаботиться о добавлении / удалении узлов, так как она будет правильно уведомлять дерево в пути.

В случае DefaultTreeModel (который должен использоваться в JTree, если вы не создали свой TreeModel), у вас есть метод insertNodeInto (MutableTreeNode newChild, MutableTreeNode parent, int index), который вы можете использовать.

3 голосов
/ 28 апреля 2010

Поскольку Java использует MVC для реализации компонента JTree, ваша операция по добавлению узла просто меняет модель. Кроме того, вы должны уведомить представление дерева о некоторых модификациях. Попробуйте использовать методы fireTreeNodes *** вашей древовидной модели, чтобы уведомить объект JTree о такой модификации. См. Java API для деталей. Удачи.

1 голос
/ 28 апреля 2010

Вы используете DefaultTreeModel?

Если это так, при добавлении используйте insertNodeInto API, чтобы генерировать соответствующие события.

...