保存JTree中的对象,但更改显示的名称(java swing)?

时间:2011-01-25 19:26:01

标签: java swing jtree

我创建了一个JTree,并用ArrayList填充了对象。 当我用GUI显示JTree的内容时,我不想看到存储对象的内存地址,而是一个自定义的字符串。

例如:我将此对象添加到我的树中:

DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(workspaces.get(i));

我在GUI上看到的是:

  

package.workspace@1df38f3

我想要替代文字而不是

  

package.workspace@1df38f3

待显示。 如何修复我的代码以支持此功能?

5 个答案:

答案 0 :(得分:2)

JTree将在您添加的项目上调用toString函数并显示该函数。如果您可以为Workspace对象编写toString,那么这将解决您的问题。如果您无法修改Workspace对象,那么您应该创建一个包含所需toString的包装器对象。

答案 1 :(得分:2)

尝试@Override ArrayList中对象的“toString()”方法

class YourObject{
...
      @Override
      public String toString(){
           return "your string formatted here";
      }

...
}

答案 2 :(得分:2)

了解TreeCellRenderers并创建自己的一个,例如扩展DefaultTreeCellRenderer。在方法

Component getTreeCellRendererComponent(JTree tree, Object value,
                   boolean selected, boolean expanded,
                   boolean leaf, int row, boolean hasFocus)

提供任何所需的逻辑

答案 3 :(得分:1)

我建议扩展JTree并覆盖convertValueToText(JTree javadoc)。默认实现是调用toString,但您可以覆盖它以生成所需的任何文本。无需包装所有数组对象或覆盖toString进行显示(我更喜欢将toString留给调试描述而不是显示文本)。

答案 4 :(得分:0)

任何关于Java的好书或教程都会教你,学会覆盖to java.lang.Object.toString()

阅读Java语言API,它明确指出所有子类都应覆盖toString()。这样做(在您的情况下)使这些对象准备好(通过引用值)传递给设置GUI文本的代码。