2012-02-21 2 views
1

В моем коде, в зависимости от состояния, узел JTree может иметь или не иметь Icon. Моя проблема в том, когда я хочу установить Icon для узла, размер имени узла уменьшается и «...» прилагаются.Изменение размера имени узла JTree при динамическом добавлении значка после генерации дерева

Таким образом, узел реконструирует свой размер на основе размера значка и установки остальных.

Как предотвратить это поведение и разрешить узлу расширять его размер при добавлении значка?

Вот скриншот без/с значком:

enter image description here

+0

'Так в основном, узел recaulculating его размер зависит от размера значка и подгонки rest.' - -> не прямой ответ на ваш вопрос, не видя [код, который сгенерирован] (http://sscce.org/) этот вопрос (ы), потому что по умолчанию ...., начните с проверки, все ли [TreeModelEvents сделаны правильно ] (http://stackoverflow.com/a/7663094/714968) – mKorbel

+0

@mKorbel Я знаю, что мой вопрос не так хорошо сформирован, но когда я хотел написать тестовый пример, он оказался очень длинным, и поэтому я подумал возможно, было общее решение этой проблемы, или, может быть, кто-то будет вести меня. Если я не найду ответа, я изменю свой вопрос –

+1

после ответа @kleopatra +1 (!!! он пересчитал размер !!!), не мог потребоваться – mKorbel

ответ

6

не знаю, где вы это делаете, но подозреваю, что вы делаете это под ноги TreeModel: LayoutCache делает много из .. ну .. кэширование размеров, поэтому вы должны убедиться, что он делает недействительным этот кеш. Единственный способ сделать это с помощью TreeModelEvents, что-то вроде (предполагается, что модель имеет тип DefaultTreeModel):

myNodeData.setIcon(...); 
treeModel.nodeChanged(node); 
+0

Спасибо за ваш ответ, я попробую этот код завтра , На самом деле у меня есть свой собственный класс «TreeNode», в котором у меня есть атрибут «iconName». Но я думаю, что 'treeModel.nodeChanged (node)' будет делать трюк, где я устанавливаю значок, у меня есть доступ к древовидной модели. –

+0

Спасибо человеку, nodeChanged работал как шарм :) Но у меня вопрос, почему есть два способа запуска событий в дереве, например 'nodeChanged' и' fireTreeNodesChanged' –

+0

пропустить «man» :-) второй для внутреннее использование, первое удобство для внешнего использования - не совсем лучшее из проектов (в идеале, модель должна всегда иметь полный контроль над ее изменениями), но в мире деревьев ... – kleopatra

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

  • Нет связанных вопросов^_^