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);
    } else {
        root_tree.setExpanded(true);
        for (TreeItem<Employee> emps : root_tree.getChildren()) {
            setTreeItem(emp, emps);
        }
    }
}

我已经到了这一步,无法再继续下去了。作为引用,我查看了这个topic但我无法真正从该解决方案中得到想法。

这些是演示图片:

first picture

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

second picture

这是检查特定元素(玛丽·约翰逊)后的图片。

正如您所看到的,它遍历整个 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?
    }
}

除了返回 true/false,您还可以返回包含您搜索的值的 TreeItemnull code> 并稍后在循环中展开项目

TreeItem<String> item = searchItem(someString, root);
if (item != null) {
    item.setExpanded(false);
    item = item.getParent();
    while (item != null) {
        item.setExpanded(true);
        item = item.getParent();
    }
}

关于JavaFX 仅展开包含特定子级的 TreeView 父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48016041/

相关文章:

java - 使用 JavaFx,如何仅在填充内更改面板背景颜色?

java - 编译单元不在 Java 项目的构建路径上 - Maven

java - Sonar Cobertura 插件找不到 coverage.xml 文件

java - 安装 java JDK 7 来运行 javafx - osx

recursion - 有没有更有效的方法来编写这个递归过程?

使用递归计算c中单词(字符串)中字母出现的次数

JavaFX - 需要通过初始化预填充字段,但不允许异常(exception)。有什么办法解决这个问题吗?

java - Apache Mina 空闲监视器

java - Android 物理/电容式导航按钮

php - 使用 Agile Toolkit 进行递归树渲染