Как я могу обновить jtree после добавления некоторых узлов в базовую модель?JAVA

Программисты JAVA общаются здесь
Anonymous
Как я могу обновить jtree после добавления некоторых узлов в базовую модель?

Сообщение Anonymous »

Прежде всего, позвольте мне сказать, что я не использую DefaultTreeModel . Я внедряю свой собственный TreeModel , поэтому я не могу использовать Defaultxxx . Проблема заключается в следующем: через некоторые методы AddStuff () , которые определяет моя модель, я добавляю узлы в основную структуру данных. Затем я уведомляю слушателей, вызывая TreeNodeschanged () внутри функции addStuff () (я знаю, что есть методы TreeNodesinserted , но это то же самое. Он просто уведомляет слушателей другим методом). Теперь один из слушателей - статический класс в моей основной форме, и этот слушатель может рассказать Jtree , который также содержится в моей основной форме, чтобы освежить себя. Как сказать Jtree < /code> «перезагрузить» некоторые или все его узлы из модели? Jtree ), но скорее, каким образом Jtree будет перезагружен после уведомления из модели. По сути, моя проблема заключается в следующем:
Предположим, что TreeModellistener только что был уведомлен (через API TreeModellistener) о том, что в модели произошло изменение. ОК, что теперь? Таким образом, слушатель, в моей ситуации, является контейнером jtree или внутренним классом, реализующим слушателя, живя под тем же контейнером, что и jtree .
, так что предположим, что я - TreeModellistener , счастливо жить в jform с моим братом jtree . Внезапно мой метод TreeNodesinserted (TreeMoDelevent EVT) вызывается. Что мне теперь делать? Если я позвоню jtree.updateui () из Inside Me, то список прослушивателей модели бросает одновременную модификацию Исключение. Могу ли я назвать что -то еще, кроме UpdateUI ? Итак, я сделал это вне слушателя. Из JFORM я просто вызываю метод модели, который изменяет базовую структуру, а затем я вызываю Updateui . Нет TreeModellistener . В AddTreeModellistener моей модели (TreeModellistener Sluster) Реализация я поместил систему отладки.

Код: Выделить всё

System.out.println("listener added: " + listener.getClass().getCanonicalName());
< /code>
и я увидел этот вывод отладки как раз когда я выполнил jtree.setmodel (model) < /code>: < /p>

Слушатель добавлен: javax.swing.jtree.tremodelhandler < /p>
Слушатель. javax.swing.plaf.basic.basictreeui.handler 

complourentmodificationexception 
вызван тем, что призыв к jtree.updateui () Registers Слушателю (только оба не выступаю, когда я не называю, когда я не называю, когда я не называю, когда я не называю. Loop.
Единственный способ обновить дерево - это сделать это за пределами TreeModellistener < /code>. Какие -нибудь комментарии или идеи для лучшего решения? Я что -то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/191 ... ying-model

Вернуться в «JAVA»