让用户将节点添加到 JTree,如果父节点已展开,则节点不会出现

问题描述 投票:0回答:2

我在 JTree 中插入节点时遇到问题。基本上,用户右键单击父节点,会显示可能要插入的子节点的列表。他们选择一个作为所选节点的子节点插入。当父节点从未扩展时,这一切都非常有效。但是,如果用户尝试插入的节点的父节点曾经展开过,则 UI 似乎不会相应更新。

以下是相关代码行: 创建 JTree:

this.tree = new JTree(ctlr.getRulesTableTreeModel().getModel());
getModel() 方法返回一个 DefaultTreeModel 对原始树层次结构进行建模。

插入节点:

this.treeModel.insertNodeInto(child, parent, index);

抱歉没有提供更多代码,但是这个项目大约有 3000 行长,我正在尝试挑选出相关的行。

java user-interface swing tree
2个回答
2
投票

您需要更新模型。

根据默认的树模型 API:

http://java.sun.com/javase/6/docs/api/javax/swing/tree/DefaultTreeModel.html

添加节点后,您需要 告诉模型该节点已添加;这将告诉用户界面正确刷新。

例如:

nodesWereInserted(TreeNode node, int[] childIndices)
          

在将一些 TreeNode 插入到 node.p 中后调用此方法


0
投票

更改某些节点(将子节点添加到yourNode)后,您可以调用此:

((DefaultTreeModel)yourTree.getModel()).nodeStructureChanged((DefaultMutableTreeNode) yourNode);

我在这里找到了此信息:https://coderanch.com/t/340158/java/Jtree-won-refresh-child-nodes

© www.soinside.com 2019 - 2024. All rights reserved.