我試圖在重新加載後在JTree
中找到解決問題的方法。 情況: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
我的代碼...
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
節點不是分層的。
有沒有辦法避免這種行爲? 謝謝。
也許另一種要問的方法可能是這是從樹上添加/刪除節點而不會導致所有樹崩潰的方式?
p.s.我也讀this post但它沒有幫助我。
發現考慮使用DefaltTreeModel#nodesWereInserted或者DefaultTreeModel的#insertNodeInto這可能是添加 – MadProgrammer
代碼......並且,你可以閱讀更新我的意思是添加一個節點和重新加載樹更容易...是不夠清楚? – Fry
@MadProgrammer你可以在答案中更好地解釋,所以我可以嘗試你的建議? – Fry