Javafx-基于数据内容隐藏TreeTableRow
我创建了一个TableTree,其中包含具有布尔属性“selected”的类组件的对象。 我想在未选择“行”组件的表中隐藏行。 我试过这个:Javafx-基于数据内容隐藏TreeTableRow,java,javafx,Java,Javafx,我创建了一个TableTree,其中包含具有布尔属性“selected”的类组件的对象。 我想在未选择“行”组件的表中隐藏行。 我试过这个: componentTree.setRowFactory(new Callback<TreeTableView<Component>, TreeTableRow<Component>>() { @Override public TreeTableRow<Component> call(TreeT
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中所建议的),是否看到此问题?过滤解决了此问题,感谢您的帮助:)