2010-04-04 63 views

回答

6

我不明白什么是你的问题。

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

+0

这正是我的问题:我不知道在这种情况下,重写'DefaultMutableTree'的'toString()'与重写用户对象的'toString()'是一样的(顺便说一句,一个外部API,所以我不能这样做)。 – 2010-04-04 17:18:57

+0

如果我有一个JTree包含活动对象,其中一个活动有一个标题和一个时间字段,我可能会在表中使用此对象,在单独的列中显示标题和时间,并在Jtree中使用它显示标题时间..但是,如果我只有toString()方法重写我不能满足两个... – dendini 2013-03-19 13:39:29

5

覆盖的toString()用户对象,或者提供一个,basic example

+1

对于TreeCellRenderer为+1。 – 2010-04-04 17:02:46

+0

我会尽可能减少渲染器。 – 2010-04-04 17:08:44

0

另一种方法是,如果您只关心为用户对象显示的文本,并且不想打扰TreeCellRender:使用您自己的代码创建一个描述性字符串来扩展JTree并覆盖convertValueToText

相关问题