加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 当TreeModel添加新节点时,为什么我的JTree不能更新?

发布时间:2020-12-15 08:42:19 所属栏目:Java 来源:网络整理
导读:我使用的DefaultTreeModel填充了DefaultMutableTreeNode的覆盖,它支持可选地更改树中节点的显示字符串.如下面的代码所示,在我的表单中,我通过在一个单独的类中创建它们然后通过我的主数据类型的包装类传递它们来为新节点填充树.其中的过程是创建一个新的重写
我使用的DefaultTreeModel填充了DefaultMutableTreeNode的覆盖,它支持可选地更改树中节点的显示字符串.如下面的代码所示,在我的表单中,我通过在一个单独的类中创建它们然后通过我的主数据类型的包装类传递它们来为新节点填充树.其中的过程是创建一个新的重写的DefaultMutableTreeNode,向其添加子节点(每个AccessPoint由具有多个子节点的节点表示),然后将其存储以供以后在UI中使用.

我第一次以这种方式添加节点,它工作得很漂亮.添加了以下代码的任何后续节点实际上存储在DefaultTreeModel中,但JTree未使用新节点进行更新.

为什么在添加第一个孩子后,JTree没有填充?

private void populateAccessPointTreeModel(AccessPointDataWrapper wrapper) {
    //the pre-created DefaultMutableTreeNode subclass instance is
    // stored in the wrapper
    DefaultMutableTreeNode accessPointNode =
            wrapper.getAccessPointTreeNode();
    //this line updates the accessPointTree with the new node (I've looked at the
    // value in debug mode,and it does in fact add the node
    ((DefaultMutableTreeNode) accessPointTree.getRoot()).add(accessPointNode);
    //unrelated logic happens down here...
}

我可以在必要时包含我创建节点的代码,但我不认为这是问题.

解决方法

问题是DefaultMutableTreeNode不通知DefaultTreeModel其子项已更新.为此,您要么想要在表模型中调用适当的方法(nodesChanged或类似),要么(最好)使用DefaultTreeModel.insertNodesInto方法.

DefaultTreeModel model = (DefaultTreeModel)accessPointTree.getModel();
DefaultMutableTreeNode root = model.getRoot();
model.insertNodeInto(accessPointNode,root,root.getChildCount());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读