【发布时间】:2011-02-13 10:09:08
【问题描述】:
我将 JTree 与 TreeNode 一起使用,它扩展了 DefaultMutableTreeNode。当我添加新节点时,我无法更新 JTree。任何帮助将不胜感激
【问题讨论】:
我将 JTree 与 TreeNode 一起使用,它扩展了 DefaultMutableTreeNode。当我添加新节点时,我无法更新 JTree。任何帮助将不胜感激
【问题讨论】:
如果您使用 DefaultTreeModel,请尝试调用其 reload() 方法。
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.reload();
//or... model.reload(nodeUpdatedByYou);
永远不要使用tree.updateUI(),因为这是一种外观操作(尽管它有效)。
【讨论】:
其实重载父节点就够了。在内部,
public void reload()
正在使用
public void reload(TreeNode node)
但以 root 作为其参数,因此,除非您要更新直接根的叶子,否则最好使用更细粒度的版本。
【讨论】:
由于Java使用MVC实现JTree组件,你添加节点的操作只是改变模型。此外,您应该通知树的表示已经发生了一些修改。尝试使用你的树模型的 fireTreeNodes*** 方法来通知 JTree 对象这种修改。有关详细信息,请参阅 Java API。祝你好运。
【讨论】:
你在用DefaultTreeModel吗?
如果是这样,添加时使用insertNodeInto API 以便生成适当的事件。
【讨论】:
仅添加到节点是不够的,需要通知树。正确的做法是让模型负责添加/删除节点,因为它会在途中正确通知树。
如果是 DefaultTreeModel(如果您还没有制作自己的 TreeModel,则应该是 JTree 中使用的那个),您可以使用方法 insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)。
【讨论】: