Сохранить объекты в JTree, но изменить отображаемое имя (java swing)? - PullRequest
1 голос
/ 25 января 2011

Я создал JTree и заполнил его объектами из ArrayList.Когда я отображаю содержимое JTree с моим графическим интерфейсом, я не хочу видеть адрес памяти, где хранится объект, а настроенную строку.

например: я добавляю этот объект в свое дерево:

DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(workspaces.get(i));

И что я вижу в своем графическом интерфейсе:

package.workspace@1df38f3

Я хочу альтернативный текст вместо

package.workspace@1df38f3

Для отображения.Как я могу исправить свой код для поддержки этого?

Ответы [ 5 ]

2 голосов
/ 26 января 2011

Прочитайте о TreeCellRenderers и создайте свой собственный, например. расширить DefaultTreeCellRenderer. В методе

Component getTreeCellRendererComponent(JTree tree, Object value,
                   boolean selected, boolean expanded,
                   boolean leaf, int row, boolean hasFocus)

Укажите любую желаемую логику

2 голосов
/ 25 января 2011

Попробуйте @Override метод "toString ()" вашего объекта, который находится в ArrayList

class YourObject{
...
      @Override
      public String toString(){
           return "your string formatted here";
      }

...
}
2 голосов
/ 25 января 2011

JTree вызовет функцию toString для добавляемых вами элементов и отобразит ее.Если вы можете написать toString для вашего объекта Workspace, то это решит вашу проблему.Если вы не можете изменить объект Workspace, то вам следует создать объект-оболочку с toString, который вы хотите.

1 голос
/ 25 января 2011

Я бы рекомендовал расширить JTree и переопределить convertValueToText ( JTree javadoc ). Реализация по умолчанию - вызывать toString, но вы можете переопределить его для создания любого текста, который вы хотите. Не нужно оборачивать все объекты массива или переопределять toString для отображения (я предпочитаю оставлять toString для отладки описаний, а не для отображения текста).

0 голосов
/ 05 июня 2012

Как и любая хорошая книга или учебник по Java, научитесь переопределять для java.lang.Object.toString ()

Прочитайте API языка Java, и в нем четко сказано, что всеподклассы должны переопределять toString().Это (в вашем случае) делает эти объекты готовыми для передачи (по ссылочному значению) в код, который устанавливает текст графического интерфейса.

...