Я пытаюсь найти решение проблемы с коллапсом в 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);
После этого я вызываю метод 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
не является иерархическим.
Есть ли способ избежать такого поведения? Спасибо.
Вероятно, можно задать и другой способ: какой способ добавить/удалить узел из дерева, не вызывая коллапса всего дерева?
p.s. Я также прочитал этот пост, но он мне не помог.