【发布时间】:2017-07-02 16:29:59
【问题描述】:
我希望我的 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:我选择删除树并生成一个新树以避免保持树和数据同步,因为它看起来更复杂。
【问题讨论】: