Java 动态JTree由JTextField中的KeyListener更新

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

我希望通过用户发起的搜索(在树的元素上)动态更新我的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;
}
到目前为止还不错。现在我想在树中搜索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();