Javafx-基于数据内容隐藏TreeTableRow

Javafx-基于数据内容隐藏TreeTableRow,java,javafx,Java,Javafx,我创建了一个TableTree,其中包含具有布尔属性“selected”的类组件的对象。 我想在未选择“行”组件的表中隐藏行。 我试过这个: componentTree.setRowFactory(new Callback<TreeTableView<Component>, TreeTableRow<Component>>() { @Override public TreeTableRow<Component> call(TreeT

我创建了一个TableTree,其中包含具有布尔属性“selected”的类组件的对象。 我想在未选择“行”组件的表中隐藏行。 我试过这个:

componentTree.setRowFactory(new Callback<TreeTableView<Component>, TreeTableRow<Component>>() {
    @Override
    public TreeTableRow<Component> call(TreeTableView<Component> param) {
        TreeTableRow<Component> row = new TreeTableRow<Component>() {
            @Override
            protected void updateItem(Component component, boolean empty) {
                if(!empty) {
                    if (!component.isSelected()) {
                        setVisible(false);
                        setManaged(false);
                        System.out.println("hide");
                    } else {
                        setVisible(true);
                        setManaged(true);
                        System.out.println("show");
                    }
                }
            }
        };
        return row;
    }
});
componentTree.setRowFactory(新回调(){
@凌驾
公共TreeTableRow调用(TreeTableView参数){
TreeTableRow行=新的TreeTableRow(){
@凌驾
受保护的void updateItem(组件,布尔值为空){
如果(!空){
如果(!component.isSelected()){
setVisible(假);
setManaged(假);
System.out.println(“隐藏”);
}否则{
setVisible(真);
setManaged(true);
系统输出打印项次(“显示”);
}
}
}
};
返回行;
}
});
在system.out上,我可以看到很多“显示”和“隐藏”消息,但这不会影响表,所有行都像以前一样显示

对这个话题有什么想法吗

谢谢

我使用eclipse的库来实现相同的目标


at.bestsolution.eclipse
org.eclipse.fx.ui.controls
2.2.0
该库在树包下提供了一个类:
FilterableTreeItem
。这个类被设计用于像你这样的情况。您可以向树的根提供一个
谓词
,当给定的值更改时,这些项将被隐藏:

//子对象
最终FilterableTreeItem子节点1=新的FilterableTreeItem(组件1);
最终FilterableTreeItem子节点2=新的FilterableTreeItem(组件2);
最终FilterableTreeItem子节点3=新的FilterableTreeItem(组件3);
//根
最终FilterableTreeItem根=新的FilterableTreeItem(根组件);
root.getInternalChildren().setAll(childNode1、childNode2、childNode3);
setPredicate((父,值)->value.isSelected());
//树状视图
最终树视图树视图=新树视图(根);
请注意,必须使用
getInternalChildren()
添加子项和默认的
getChildren()

FilterableTreeItem
还提供了一个
predicateProperty()
,当您需要更新项的显示或隐藏方式时,可以将其绑定到另一个属性


该类的另一个优点是它显示了到匹配该谓词的项的根的整个路径。

另外:我可以使用该代码管理行的样式(如背景色),但是可见性仍然不起作用。请过滤数据以不包含选定的行。在过滤由
树表显示的数据时(如@kleopatra comment中所建议的),是否看到此问题?过滤解决了此问题,感谢您的帮助:)