Javafx 如何侦听tableview中的内部更改?
我有一个TableView,它的项包含复选框。一旦选中两个复选框,我需要“取消隐藏”一个按钮 我不知道怎么检查。你有办法吗Javafx 如何侦听tableview中的内部更改?,javafx,tableview,javafx-8,observablelist,Javafx,Tableview,Javafx 8,Observablelist,我有一个TableView,它的项包含复选框。一旦选中两个复选框,我需要“取消隐藏”一个按钮 我不知道怎么检查。你有办法吗 这些物品彼此不认识 TableView控制器保存TableView和TableColumns 据我所知,您不能在这里使用绑定,因为您不能将自己绑定到多个属性。我为每一种帮助感到高兴。:) 编辑:澄清我自己:tableView.getItems().addListener()不起作用,因为它只能侦听对列表的修改,而不能侦听外部元素。它可以注意到是否调用了“add()”或“
- 这些物品彼此不认识
- TableView控制器保存TableView和TableColumns
PS:在一个单独的线程中忙着等待当然不是解决方案。假设您有一个
表视图
,用于一些项
类和布尔属性
:
public class Item {
private final BooleanProperty checked = new SimpleBooleanProperty();
public BooleanProperty checkedProperty() {
return checked ;
}
public final boolean isChecked() {
return checkedProperty().get();
}
public final void setChecked(boolean checked) {
checkedProperty().set(checked);
}
// other properties, etc...
}
并且您的复选框已绑定到此属性,然后您可以使用提取器创建项目列表:
ObservableList<Item> items = FXCollections.observableArrayList(item ->
new Observable[] { item.checkedProperty() });
table.setItems(items);
如果您想变得超级高效:
int requiredNumberChecked = 2 ;
button.visibleProperty().bind(Bindings.createBooleanBinding(() ->
items.stream()
.filter(Item::isSelected)
.skip(requiredNumberChecked-1)
.findAny().isPresent(),
items));
(只要找到两个选中的项,绑定就会返回true,而不是扫描整个列表)。假设您有一个
表视图
用于某些项
类,该类具有布尔属性
:
public class Item {
private final BooleanProperty checked = new SimpleBooleanProperty();
public BooleanProperty checkedProperty() {
return checked ;
}
public final boolean isChecked() {
return checkedProperty().get();
}
public final void setChecked(boolean checked) {
checkedProperty().set(checked);
}
// other properties, etc...
}
并且您的复选框已绑定到此属性,然后您可以使用提取器创建项目列表:
ObservableList<Item> items = FXCollections.observableArrayList(item ->
new Observable[] { item.checkedProperty() });
table.setItems(items);
如果您想变得超级高效:
int requiredNumberChecked = 2 ;
button.visibleProperty().bind(Bindings.createBooleanBinding(() ->
items.stream()
.filter(Item::isSelected)
.skip(requiredNumberChecked-1)
.findAny().isPresent(),
items));
(只要找到两个选中的项目,绑定就会返回true,而不是扫描整个列表)。您的复选框绑定到您的项目的某些
BooleanProperty
?您的复选框绑定到您的项目的某些BooleanProperty
?这看起来像是一个高级版本,谢谢。但我不理解“新可观察[]”部分。在我的理解中,这创建了一个不应该放在“ObservableList”中的可观察对象,可能只是为了“ObservableList”和“extractor”。这看起来像是一个豪华版本,谢谢。但我不理解“new Observable[]”部分。在我的理解中,这创建了一个不应该放在“ObservableList”中的可观察对象ObservableList,也许只是“ObservableList”和“extractor”。