我希望我的JTree能夠通過用戶啓動的搜索(通過樹的元素)進行動態更新。從控制檯上的輸出中,我可以看出,搜索工作就像它應該那樣。問題是更新樹。動態JTree由JTextField中的KeyListener更新
這是我得到的。我有一組類如
public class classA {
int id;
String name;
List<ClassB> listOfClassB;
}
public class classB {
int id;
String name;
List<ClassC> listOfClassC;
}
public class classC {
int id;
String name;
}
從這些類我通過循環createTree()中的類列表生成一個JTree。
private DefaultMutableTreeNode rootNode;
rootNode = createTree("New", ""); // "New" tells the method to generate the complete tree
treeModel = new DefaultTreeModel(rootNode);
JTree myTree = new JTree(treeModel);
到目前爲止好。現在我想在classC.name或classC.id中搜索樹或字符串,並「刪除」與搜索條件不匹配的所有節點。但不是對象,只有對應的樹節點。因此,當用戶完成搜索時,我可以再次顯示整棵樹。
使用JTextField和調用createTree(searchOption,searchText)的KeyListener實現搜索。
到目前爲止,我嘗試使用removeAllChildren()刪除所有節點,然後添加符合搜索條件的新節點。之後重新加載TreeModel在這裏似乎不起作用。
createTree(searchOption, searchText);
rootNode.removeAllChildren();
treeModel.reload(rootNode);
任何想法我可以做到這一點?
PS:我選擇刪除樹並生成一個新樹,以避免保持樹和數據同步,因爲它看起來更復雜。
感謝您使用DocumentListener的提示。重置模型不起作用。我發佈了我找到的解決方案。 – JKB