我创建了一个JTree,并用ArrayList填充了对象。 当我用GUI显示JTree的内容时,我不想看到存储对象的内存地址,而是一个自定义的字符串。
例如:我将此对象添加到我的树中:
DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(workspaces.get(i));
我在GUI上看到的是:
package.workspace@1df38f3
我想要替代文字而不是
package.workspace@1df38f3
待显示。 如何修复我的代码以支持此功能?
答案 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文本的代码。