我正在尝试在重新加载后找到解决 JTree
崩溃的问题 . 情况:
JTree
[-] Office A
|---[-] Office A.1
| |---[-] Office A.1.1
| |---[-] Office A.1.2
[-] Office B
|---[-] Office B.1
| |---[-] Office B.1.1
| | |---[-] Office B.1.1.1
现在我必须添加 Office A.1.3
. 要做到这一点,我得到 Office A.1
并使用方法 add(DefaultMutableTreeNode aNode)
我添加 Office A.1.3
.
OfficeA1.add(OfficeA13);
在此之后,我在树的 DefaultTreeModel
上调用 reload
方法 .
问题是在这次调用之后树崩溃了所有:
[+] Office A
[+] Office B
我必须手动扩展节点 Office A
以确保添加节点...
[-] Office A
|---[-] Office A.1
| |---[-] Office A.1.1
| |---[-] Office A.1.2
| |---[-] Office A.1.3
[+] Office B
My code...
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root not visibile");
DefaultMutableTreeNode usersRoot = new DefaultMutableTreeNode("Utenti");
DefaultMutableTreeNode groupsRoot = new DefaultMutableTreeNode("Gruppi");
DefaultMutableTreeNode officesRoot = new DefaultMutableTreeNode("Uffici")
root.add(usersRoot);
root.add(groupsRoot);
root.add(officesRoot);
JTree ccTree = new JTree(root);
当我添加节点...
Office anOffice = //get the correct office object
DefaultTreeModel model = (DefaultTreeModel)competenzaTree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
DefaultMutableTreeNode n = (DefaultMutableTreeNode)root.getChildAt(0);
n.add(new DefaultMutableTreeNode(anOffice));
model.reload(n);
问题是 officesRoot
节点 . usersRoot
和 groupsRoot
节点不是分层的 .
有没有办法避免这种行为?谢谢 .
可能是另一种提问方式可能是 which is the way to add/remove node from a tree without causing collapse of all tree ?
附:我也读过this post但它没有帮助我 .
1 回答
考虑使用DefaultTreeModel#insertNodeInto(DefaultMutableNode, DefaultMutableNode, int),它应该通知
JTree
表新节点可用,导致JTree
更新,但不应影响树的当前展开状态此示例基于How to use trees中的示例