gpt4 book ai didi

Javafx - 根据数据内容隐藏TreeTableRow

转载 作者:行者123 更新时间:2023-12-01 18:12:47 26 4
gpt4 key购买 nike

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

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;
}
});

在system.out上我可以看到很多“显示”和“隐藏”消息,但这不会影响表格,所有行都像以前一样显示。

对这个主题有什么想法吗?

谢谢!

最佳答案

我用了eclipse的 fx.ui.controls 相同的库之前实现了相同的目标。

<dependency>
<groupId>at.bestsolution.eclipse</groupId>
<artifactId>org.eclipse.fx.ui.controls</artifactId>
<version>2.2.0</version>
</dependency>

库提供了一个类:FilterableTreeItem<T>树包下。该类旨在用于像您这样的情况。您可以提供Predicate到树的根,当给定的值发生变化时,项目将被隐藏:

// Children
final FilterableTreeItem<Component> childNode1 = new FilterableTreeItem<>(component1);
final FilterableTreeItem<Component> childNode2 = new FilterableTreeItem<>(component2);
final FilterableTreeItem<Component> childNode3 = new FilterableTreeItem<>(component3);

// Root
final FilterableTreeItem<Component> root = new FilterableTreeItem<>(rootComponent);
root.getInternalChildren().setAll(childNode1, childNode2, childNode3);
root.setPredicate((parent, value) -> value.isSelected());

// TreeTableView
final TreeTableView<Component> treeTableView = new TreeTableView<>(root);

请注意,您必须使用 getInternalChildren()添加子项和默认值 getChildren() .

FilterableTreeItem<T>还提供了predicateProperty()如果您需要更新项目的显示或隐藏方式,您可以绑定(bind)到另一个属性。

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

关于Javafx - 根据数据内容隐藏TreeTableRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60434955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com