使用 a 时,可以设置JTree
a 的“用户对象” 。DefaultMutableTreeNode
这可以是任何类型的,但为了显示它,toString()
使用它的值。这不是我需要的。
如何更改用户对象的显示方式?
注意:我的用户对象必须不同于 aString
才能维护树和用户对象之间的映射。
使用 a 时,可以设置JTree
a 的“用户对象” 。DefaultMutableTreeNode
这可以是任何类型的,但为了显示它,toString()
使用它的值。这不是我需要的。
如何更改用户对象的显示方式?
注意:我的用户对象必须不同于 aString
才能维护树和用户对象之间的映射。
我不明白你有什么问题。
将在用户对象上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
by 覆盖toString
方法,但您需要对您的对象进行额外的引用,否则将需要一些向下转换。
如果您确实需要与字符串不同的可视化,则必须编写自己的渲染来实现TableCellRenderer
.
在您的用户对象上覆盖 toString() 或提供TreeCellRenderer,基本示例
如果您只关心为用户对象显示的文本并且不想打扰 TreeCellRender,则另一种选择:扩展 JTree 并使用您自己的代码覆盖convertValueToText,从而为该对象创建描述性字符串。