我正在尝试找到JTree
重新加载后崩溃问题的解决方案。情况:
J树
[-] 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
的方法得到 and 。add(DefaultMutableTreeNode aNode)
Office A.1.3
OfficeA1.add(OfficeA13);
在此之后,我调用树上的reload
方法。DefaultTreeModel
问题是,在此调用之后,树全部崩溃:
[+] 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
我的代码...
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
节点不是分层的。
有没有办法避免这种行为?谢谢。
可能另一种询问方式是在不导致所有树崩溃的情况下从树中添加/删除节点的方法是什么?
ps 我也读过这篇文章,但对我没有帮助。