Java Swing:如何定义JTree如何显示“用户对象”?

时间:2010-04-04 16:51:34

标签: java swing jtree treemodel user-object

使用JTree时,可以设置DefaultMutableTreeNode的“用户对象”。这可以是任何类型,但为了显示它,使用其toString()值。这不是我需要的。

如何更改用户对象的显示方式?

注意:我的用户对象 String不同,以便能够维护树和用户对象之间的映射。

3 个答案:

答案 0 :(得分:6)

我不明白你的问题。

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,但是你需要额外引用你的对象或者一些 downcasts 将是必需的。

如果你真的需要一个不同的可视化而不是一个字符串,你必须编写自己的渲染来实现TableCellRenderer

答案 1 :(得分:5)

覆盖用户对象上的toString()或提供TreeCellRendererbasic example

答案 2 :(得分:0)

另一种选择,如果您只关心为用户对象显示的文本而不想打扰TreeCellRender:扩展JTree并使用您自己的代码覆盖convertValueToText,为该对象创建描述性字符串。 / p>