Java Swing: как мне определить, как JTree отображает «пользовательский объект»? - PullRequest
4 голосов
/ 04 апреля 2010

При использовании JTree можно установить «пользовательский объект» DefaultMutableTreeNode. Это может быть любой вид, но для его отображения используется значение toString(). Это не то, что мне нужно.

Как изменить способ отображения пользовательского объекта?

ПРИМЕЧАНИЕ. Мой пользовательский объект имеет , отличную от String, для обеспечения возможности отображения между деревом и объектами пользователя.

Ответы [ 3 ]

6 голосов
/ 04 апреля 2010

Я не понимаю, в чем твоя проблема.

DefaultMutableTreeNode будет использовать метод toString для объекта пользователя, потому что это имеет смысл. JTree нужны строки для рисования объектов, поэтому, спрашивая ваш объект, его представление строки в порядке.

Если вам действительно нужно избегать вызова toString для вашего объекта, вам все равно понадобится способ представить его в виде строки, но вам придется написать собственный MutableTreeNode:

class MyTreeNode implements MutableTreeNode
{
  UserObject yourObject;

  MyTreeNode(UserObject yourObject)
  {
    this.yourObject = yourObject;
  }

  // implement all needed methods to handle children and so on

  public String toString()
  {
    // then you can avoid using toString
    return yourObject.sringRapresentation();
  }
}

Но я действительно не вижу смысла делать это ... кроме того, вы можете попробовать расширить DefaultMutableTreeNode путем переопределения метода toString, но вам понадобится дополнительная ссылка на ваш объект или некоторые downcasts будет необходимо.

Если вам действительно нужна визуализация, отличная от строки, вам придется написать собственный отрисованный, который реализует TableCellRenderer.

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

Переопределите toString () для вашего пользовательского объекта ИЛИ предоставьте TreeCellRenderer , базовый пример

0 голосов
/ 23 апреля 2013

Другой вариант, если вы просто заботитесь о тексте, отображаемом для пользовательского объекта и не хотите беспокоиться о TreeCellRender: расширьте JTree и переопределите convertValueToText своим собственным кодом, который создает описательную строку для этого объекта .

...