Java Swing: расширение TreeNode - PullRequest
2 голосов
/ 12 апреля 2010

Я работаю над настройкой клиентского приложения с закрытым исходным кодом. Он имеет дерево в пользовательском интерфейсе и предоставляет только метод для получения выбранного узла. Возвращает подкласс TreeNode. И нет возможности получить ссылку на родительское дерево. Теперь я хочу расширить выбранный узел до его листьев.

Есть ли способ получить ссылку на компонент JTree из DefaultMutableTreeNode? Я планирую использовать JTree.expandPath (), но у меня есть только ссылка на treenode.

Я новичок в Swing, и любые предложения по достижению этого приветствуются.

Ответы [ 3 ]

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

На самом деле, только JTree знает о состоянии расширения, в TreeNodes такой информации нет. TreeNodes находятся на стороне "модель" и не имеют указателя на JTree (по крайней мере, не по умолчанию, вы можете сделать свой собственный с помощью ссылки, но это немного нарушает шаблон).

Вам следует пересмотреть место, где вы хотите сделать это расширение, для места, в котором у вас есть доступ к JTree (предоставьте, возможно, более подробную информацию о вашем контексте, чтобы узнать больше о том, что вы хотите сделать и при каких обстоятельствах).

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

Глядя на источник для DefaultMutableTreeNode, я не вижу хорошего способа сделать это, но вы можете попробовать один из следующих:

  • Расширьте DefaultMutableTreeNode и сохраните ссылку на ваше дерево
  • Узел по умолчанию имеет понятие «пользовательский объект». Вы могли бы установить ссылку на дерево как этот объект. Это совершенно не типичный сейф, но, вероятно, будет работать. EDIT: На самом деле, если присмотреться к тому, как используется пользовательский объект (как текстовое представление пути к дереву и в toString()), установка этого пользовательского объекта приведет к массовому уничтожению использования API по назначению. Итак: противно, но может сработать.
0 голосов
/ 12 апреля 2010

Узел дерева - это элемент из модели дерева. Как следствие, он не имеет никакого отношения к дереву, которое является его видом.

Что может быть интересно, так это узнать, в каком объекте вы находитесь: поскольку вы хотите реагировать на событие мыши, я полагаю, у вас есть доступ к слою представления (по крайней мере, путем возврата компонента, создавшего MouseEvent, который дерево). Если это так, вы можете получить выбранную строку и вызвать expandPath . Построение TreePath из DefaultMutableTreeNode оставлено в качестве упражнения: -)

РЕДАКТИРОВАТЬ Из приведенных ниже комментариев, позвольте мне уточнить мой ответ. Вам нужно будет вызвать expandPath , используя TreePath , сгенерированный простым вызовом getPath в вашем DefaultMutableTreeNode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...