[英]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.