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 с помощью собственного кода, который создает описательную строку для этого объекта.