Java Swing: как мне определить, как JTree отображает "пользовательский объект"?

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

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

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

3 ответа

Решение

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

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 метод, но вам понадобится дополнительная ссылка на ваш объект, или понадобятся некоторые откаты.

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

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

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

Другие вопросы по тегам