【发布时间】:2011-02-04 05:32:30
【问题描述】:
使用JTree 时,可以设置DefaultMutableTreeNode 的“用户对象”。这可以是任何类型的,但要显示它,使用它的toString() 值。这不是我需要的。
如何更改用户对象的显示方式?
注意:我的用户对象 必须 与 String 不同,以便能够维护树和用户对象之间的映射。
【问题讨论】:
标签: java swing jtree treemodel user-object
使用JTree 时,可以设置DefaultMutableTreeNode 的“用户对象”。这可以是任何类型的,但要显示它,使用它的toString() 值。这不是我需要的。
如何更改用户对象的显示方式?
注意:我的用户对象 必须 与 String 不同,以便能够维护树和用户对象之间的映射。
【问题讨论】:
标签: java swing jtree treemodel user-object
我不明白你有什么问题。
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();
}
}
但我真的不明白这样做的意义..此外,您可以尝试通过覆盖 toString 方法来扩展 DefaultMutableTreeNode,但您需要对您的对象的额外引用或一些 向下转换 将需要。
如果您确实需要与字符串不同的可视化,则必须编写自己的渲染器来实现TableCellRenderer。
【讨论】:
DefaultMutableTree 的 toString() 与覆盖用户对象的 toString() 相同(顺便说一下final 并且来自外部 API,所以我做不到)。
在您的用户对象上覆盖 toString() 或提供 TreeCellRenderer、basic example
【讨论】:
如果您只关心为用户对象显示的文本并且不想打扰 TreeCellRender,则另一种选择:扩展 JTree 并使用您自己的代码覆盖 convertValueToText,从而为该对象创建描述性字符串。
【讨论】: