我希望我的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