Метки узлов JTree часто меняются, но ширина кэшируется - PullRequest
7 голосов
/ 13 февраля 2010

В настоящее время я использую пользовательский TreeCellRenderer для обработки изменений меток и значков для моего JTree. Проблема возникает, когда мне нужно изменить текст на нескольких узлах. TreeCellRenderer прекрасно работает, так как отображается новый текст. Однако ширина исходного текста кэшируется и не обновляется. Я попытался взломать его, переопределив getPreferredSize в TreeCellRenderer, но это не работает должным образом, так как у меня есть строки HTML. Я даже пытался разобрать теги и получить ширину, но это все еще не идеально. Я использовал SwingUtilities и FontMetrics.

Кажется, что использование поддержки дерева DefaultTreeModel.nodeChanged (TreeNode) является правильным способом изменения узла. Однако мне потребуется дополнительная структура данных для обработки доступа к узлам, которые необходимо изменить. Лично я хотел бы изменить только те узлы, которые нужно изменить. Но для этого потребуется другая структура данных, чтобы найти все узлы, которые нужно обновить. Как лучше всего обходить размер кэширования JLabel в этой ситуации?

1 Ответ

2 голосов
/ 13 февраля 2010

Я обнаружил, что использование предложенного вами способа вызова nodeChanged работает лучше всего для меня.

...