繁体   English   中英

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

[英]Save objects in a JTree but change the displayed name (java swing)?

我做了一个JTree,并用ArrayList对象填充了它。 当我使用GUI显示JTree的内容时,我不想看到存储对象的内存地址,而是看到了自定义的String。

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

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

我在GUI上看到的是:

package.workspace@1df38f3

我想要替代文字而不是

package.workspace@1df38f3

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

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

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

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

...
}

阅读有关TreeCellRenderer的信息并创建自己的一个,例如扩展DefaultTreeCellRenderer。 在方法中

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

提供任何所需的逻辑

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

正如任何有关Java的好书或教程所教您的,学习覆盖到java.lang.Object.toString()

阅读Java语言API,它明确指出所有子类都应重写toString() 这样做(就您而言)使这些对象准备好(通过参考值)传递给设置GUI文本的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM