【问题标题】:How to update JTree elements如何更新 JTree 元素
【发布时间】:2011-02-13 10:09:08
【问题描述】:

我将 JTree 与 TreeNode 一起使用,它扩展了 DefaultMutableTreeNode。当我添加新节点时,我无法更新 JTree。任何帮助将不胜感激

【问题讨论】:

    标签: java swing jtree


    【解决方案1】:

    如果您使用 DefaultTreeModel,请尝试调用其 reload() 方法。

    DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
    model.reload();
    
    //or... model.reload(nodeUpdatedByYou);
    

    永远不要使用tree.updateUI(),因为这是一种外观操作(尽管它有效)。

    【讨论】:

      【解决方案2】:

      其实重载父节点就够了。在内部,

      public void reload()
      

      正在使用

      public void reload(TreeNode node)
      

      但以 root 作为其参数,因此,除非您要更新直接根的叶子,否则最好使用更细粒度的版本。

      【讨论】:

        【解决方案3】:

        由于Java使用MVC实现JTree组件,你添加节点的操作只是改变模型。此外,您应该通知树的表示已经发生了一些修改。尝试使用你的树模型的 fireTreeNodes*** 方法来通知 JTree 对象这种修改。有关详细信息,请参阅 Java API。祝你好运。

        【讨论】:

          【解决方案4】:

          你在用DefaultTreeModel吗?

          如果是这样,添加时使用insertNodeInto API 以便生成适当的事件。

          【讨论】:

          • 不过,如果你没有带来任何新的东西,请避免重复答案。
          • Buddy @Gnoupi - 不赞成投票。我们同时回答了这个问题。我曾多次看到,当我完成输入答案并发布时,会刷新一些新答案。适合自己。
          • 你半小时后回答了,说的基本一样,那不是我所谓的“并发”。就像我已经说过的那样,避免重复,因为它最终会带来混乱。如果答案已经说明了您要说的话,您可以直接不发布您的答案,或者如果已经发布,则删除。
          【解决方案5】:

          仅添加到节点是不够的,需要通知树。正确的做法是让模型负责添加/删除节点,因为它会在途中正确通知树。

          如果是 DefaultTreeModel(如果您还没有制作自己的 TreeModel,则应该是 JTree 中使用的那个),您可以使用方法 insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)

          【讨论】:

            猜你喜欢
            • 2012-06-22
            • 2011-03-28
            • 1970-01-01
            • 2020-05-16
            • 1970-01-01
            • 2023-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多