[英]Dynamic JTree updated by KeyListener in a JTextField
我希望通过用户启动的搜索(在树的元素上)动态更新JTree。 从控制台上的输出中,我可以看出,搜索的工作方式应该像它应该的那样。 问题是更新树。
这就是我得到的。 我有一组像
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中的String或Int,然后“删除”所有不符合搜索条件的节点。 但不是对象,只有相应的树节点。 这样,当用户完成搜索后,我可以再次显示整个树。
搜索是通过JTextField和调用createTree(searchOption,searchText)的KeyListener实现的。
到目前为止,我已经尝试使用removeAllChildren()删除所有节点,然后添加与搜索条件匹配的新节点。 之后,重新加载TreeModel在这里似乎不起作用。
createTree(searchOption, searchText);
rootNode.removeAllChildren();
treeModel.reload(rootNode);
有什么想法可以实现吗?
PS:我选择删除树并生成一个新树,以避免使树和数据保持同步,因为它看起来更加复杂。
JTree myTree = new JTree(treeModel);
那句话看起来不正确。 您创建了一个新的JTree,但是我看不到将树添加回框架的位置。
无需创建新树,只需重置树的模型即可:
myTree.setModel( treeModel );
搜索是通过JTextField和调用createTree(searchOption,searchText)的KeyListener实现的。
不要使用KeyListener。 您应该使用DocumentListener
来侦听文本中的更改。 阅读Swing教程中有关文档更改的侦听器的部分。
在重新加载模型之前,我确实通过创建和设置新的根节点来加载“新”树。 在我看来,这似乎并不“干净”,但确实可以解决问题。
rootNode = createTree(searchOption, searchText);
treeModel.setRoot(rootNode);
treeModel.reload();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.