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不在那里。
答案
即使您搜索的项目不是项目的后代,也可以在非终端案例中扩展TreeItem
s。由于您遍历整个树,所有节点都会扩展。要解决此问题,请提供反馈作为返回值:
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
而不是返回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父级的主要内容,如果未能解决你的问题,请参考以下文章