【问题标题】:Save objects in a JTree but change the displayed name (java swing)?将对象保存在 JTree 中但更改显示的名称(java swing)?
【发布时间】:2011-01-25 19:26:00
【问题描述】:

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

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

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

我在 GUI 上看到的是:

package.workspace@1df38f3

我想要替代文本而不是

package.workspace@1df38f3

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

【问题讨论】:

    标签: java swing jtree


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        阅读 TreeCellRenderers 并创建您自己的,例如扩展 DefaultTreeCellRenderer。在方法中

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

        提供任何所需的逻辑

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            正如任何关于 Java 的好书或教程教你的那样,学习覆盖 to java.lang.Object.toString()

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

            【讨论】:

              猜你喜欢
              • 2011-02-04
              • 2011-05-29
              • 2012-08-30
              • 2011-07-04
              • 1970-01-01
              • 2019-12-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多