2010-04-28 4 views

ответ

5

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

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

3

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

1

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

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

+0

Избегайте дублирования ответов, хотя, если вы не принесете ничего нового. – Gnoupi

+0

Buddy @Gnoupi - голосующий голос был невостребован. Мы одновременно ответили на вопрос. Я видел в нескольких случаях, что к тому времени, когда я закончу, введите свой ответ и сообщение, обновится несколько новых ответов. Подойдите сами. –

+1

вы ответили через полчаса, сказав в основном то же самое, это не то, что я бы назвал «одновременно». Как я уже сказал, избегайте дублирования, так как это в конечном итоге создает беспорядок. Если ответ уже говорит о том, что вы должны сказать, вы можете просто не публиковать свои данные или удалять, если они уже отправлены. – Gnoupi

4

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

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

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

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

6

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

public void reload() 

использует

public void reload(TreeNode node) 

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

Смежные вопросы