Java 动态JTree由JTextField中的KeyListener更新
我希望通过用户发起的搜索(在树的元素上)动态更新我的JTree。从控制台上的输出中,我可以看出,搜索的工作方式应该是这样的。问题是更新树 这是我得到的。我有一系列的课程,比如Java 动态JTree由JTextField中的KeyListener更新,java,swing,jtree,Java,Swing,Jtree,我希望通过用户发起的搜索(在树的元素上)动态更新我的JTree。从控制台上的输出中,我可以看出,搜索的工作方式应该是这样的。问题是更新树 这是我得到的。我有一系列的课程,比如 public class classA { int id; String name; List<ClassB> listOfClassB; } public class classB { int id; String name; List<Cl
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;
}
到目前为止还不错。现在我想在树中搜索classC.name或classC.id中的字符串或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();
感谢DocumentListener提供的提示。重置模型不起作用。我发布了我找到的解决方案。
rootNode = createTree(searchOption, searchText);
treeModel.setRoot(rootNode);
treeModel.reload();