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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX仅扩展包含特定Child的TreeView父级相关的知识,希望对你有一定的参考价值。

我遇到的问题是获取包含特定Child的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,但我无法真正从该解决方案中获得想法。

这些是用于演示的图片:

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

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

正如你所看到的,它遍历整个TreeView并扩展了所有TreeView父母,但毕竟Mary Johnson不在那里。

答案

即使您搜索的项目不是项目的后代,也可以在非终端案例中扩展TreeItems。由于您遍历整个树,所有节点都会扩展。要解决此问题,请提供反馈作为返回值:

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?
    }
}

你也可以返回包含你搜索的值或truefalse而不是返回TreeItem / null,然后在循环中展开项目

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仅扩展包含特定Child的TreeView父级的主要内容,如果未能解决你的问题,请参考以下文章

如何扩展 JavaFX Shape 类以实现自定义形状

过滤现有项目组,使其仅包含符合某些条件的文件

PHP为仅文件特定扩展名创建一个Zip存档

是否可以仅为打字稿上的特定类型扩展 Array.prototype?

通过双击文件将参数传递给 JavaFx 应用程序

要包含而不是排除的文件扩展名 - Subversion