JavaFX仅扩展包含特定子级的TreeView父级

JavaFX仅扩展包含特定子级的TreeView父级,java,recursion,javafx,treeview,Java,Recursion,Javafx,Treeview,我遇到的问题是让包含特定子节点的TreeView节点折叠/扩展,而不是让每个TreeView节点/父节点折叠。我尝试了递归,但失败很大,没有意识到解决方案可能是什么 下面是我的代码: public void setTreeItem(Employee emp, TreeItem<Employee> root_tree) { if (emp.equals(root_tree.getValue())) { root_tree.setExpanded(false);

我遇到的问题是让包含特定子节点的TreeView节点折叠/扩展,而不是让每个TreeView节点/父节点折叠。我尝试了递归,但失败很大,没有意识到解决方案可能是什么

下面是我的代码:

public void setTreeItem(Employee emp, TreeItem<Employee> root_tree) {
    if (emp.equals(root_tree.getValue())) {
        root_tree.setExpanded(false);
    } else {
        root_tree.setExpanded(true);
        for (TreeItem<Employee> emps : root_tree.getChildren()) {
            setTreeItem(emp, emps);
        }
    }
}
public void setTreeItem(员工emp,TreeItem根目录树){
if(emp.equals(root_tree.getValue())){
根树。setExpanded(false);
}否则{
根树。setExpanded(true);
for(TreeItem emps:root_tree.getChildren()){
setTreeItem(emp,emp);
}
}
}
我说到这一点,不能再进一步了。作为参考,我检查了这一点,但我真的无法从该解决方案中得到想法

这些是供演示的图片:

这是检查特定元素之前的图片

这是在检查了特定元素后的照片(玛丽·约翰逊)


正如您所看到的,它贯穿整个TreeView并扩展所有TreeView父级,但毕竟Mary Johnson不在那里。

在非终端情况下,即使您搜索的项目不是该项目的后代,也可以扩展
TreeItem。因为您要遍历整个树,所以所有节点都会展开。要修复此问题,请将反馈作为返回值提供:

public boolean setTreeItem(Employee emp, TreeItem<Employee> root_tree) {
    if (emp.equals(root_tree.getValue())) {
        root_tree.setExpanded(false);
        return true;
    } else {
        for (TreeItem<Employee> emps : root_tree.getChildren()) {
            if (setTreeItem(emp, emps)) {
                // expand & return true, if item is a descendant of the current item
                root_tree.setExpanded(true);
                return true;
            }
        }
        return false; // set expanded to false before returning here?
    }
}

你能说明你想做什么吗?调用(名称不正确的)
setTreeItem
方法后,树的状态应该是什么?只有从根目录到包含所提供值的项的路径应该展开,其他所有内容都应该折叠?还是别的什么?
TreeItem<String> item = searchItem(someString, root);
if (item != null) {
    item.setExpanded(false);
    item = item.getParent();
    while (item != null) {
        item.setExpanded(true);
        item = item.getParent();
    }
}