使用JTree
时,可以设置DefaultMutableTreeNode
的“用户对象”。这可以是任何形式的,但要显示它,使用toString()
值。这不是我需要的。Java Swing:如何定义JTree如何显示“用户对象”?
如何更改用户对象的显示方式?
注:我的用户对象有比一个String
不同的东西能够保持树和用户对象之间的映射。
使用JTree
时,可以设置DefaultMutableTreeNode
的“用户对象”。这可以是任何形式的,但要显示它,使用toString()
值。这不是我需要的。Java Swing:如何定义JTree如何显示“用户对象”?
如何更改用户对象的显示方式?
注:我的用户对象有比一个String
不同的东西能够保持树和用户对象之间的映射。
我不明白什么是你的问题。
DefaultMutableTreeNode
将在用户对象上使用toString
方法,因为它是有意义的。 JTree
需要字符串来绘制对象,以便向对象询问其字符串rapresentation是否正确。
如果你真的需要避免调用你的对象toString
你将需要一种方式来反正提供的一个字符串rapresentation,但是你必须写自己的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
。
覆盖的toString()用户对象,或者提供一个,basic example
对于TreeCellRenderer为+1。 – 2010-04-04 17:02:46
我会尽可能减少渲染器。 – 2010-04-04 17:08:44
另一种方法是,如果您只关心为用户对象显示的文本,并且不想打扰TreeCellRender:使用您自己的代码创建一个描述性字符串来扩展JTree并覆盖convertValueToText。
这正是我的问题:我不知道在这种情况下,重写'DefaultMutableTree'的'toString()'与重写用户对象的'toString()'是一样的(顺便说一句,一个外部API,所以我不能这样做)。 – 2010-04-04 17:18:57
如果我有一个JTree包含活动对象,其中一个活动有一个标题和一个时间字段,我可能会在表中使用此对象,在单独的列中显示标题和时间,并在Jtree中使用它显示标题时间..但是,如果我只有toString()方法重写我不能满足两个... – dendini 2013-03-19 13:39:29