Javafx 创建与列表/ObstableList值绑定的布尔绑定

Javafx 创建与列表/ObstableList值绑定的布尔绑定,javafx,binding,observable,Javafx,Binding,Observable,我正在尝试创建BooleanBinding,这是一个绑定了按钮#disableProperty()。我的目的是在从动态创建的面板列表中更改TextField时启用/禁用OK按钮 这是面板列表(propertiesList)的初始化 如果使用ObservableList,则不会出现错误,只会对列表本身进行更改 ObservableList<BooleanProperty> list = propertiesList.stream() .map(pane -> pane.c

我正在尝试创建
BooleanBinding
,这是一个绑定了
按钮#disableProperty()
。我的目的是在从动态创建的面板列表中更改
TextField
时启用/禁用OK按钮

这是面板列表(propertiesList)的初始化

如果使用
ObservableList
,则不会出现错误,只会对列表本身进行更改

ObservableList<BooleanProperty> list = propertiesList.stream()
    .map(pane -> pane.changeProperty())
    .collect(Collectors.toCollection(() -> FXCollections.observableArrayList()));

BooleanBinding change = Bindings.createBooleanBinding(() -> true, list);

Button button = (Button) dialogPane.lookupButton(okButtonType);
button.disableProperty().bind(change.not());
observeList list=propertiesList.stream()
.map(窗格->窗格.changeProperty())
.collect(Collectors.toCollection(()->FXCollections.observearraylist());
BooleanBinding change=Bindings.createBooleanBinding(()->true,list);
按钮按钮=(按钮)对话框窗格。查找按钮(okButtonType);
button.disableProperty().bind(change.not());
List.toArray()
返回一个
对象[]
数组,而不是
布尔属性[]
数组,但是您可以在此处将对象数组强制转换为
布尔属性

(BooleanProperty[]) list.toArray()
我建议使用:

除非您将
Callable
更改为更有意义的内容,否则也可以省略依赖项,因为绑定从不包含值,而是
true


不起作用,因为列表本身实现了
Observable
,所以您将只包含列表的数组传递给varargs参数,即它等效于

BooleanBinding change = Bindings.createBooleanBinding(() -> true, new Observable []{ list });

唯一添加的
invalizationlistener
将添加到列表本身,而不是其内容。

您的解决方案是完美的。我给出的只是一个例子,所以我们让它返回真值。10倍
ObservableList<BooleanProperty> list = propertiesList.stream()
    .map(pane -> pane.changeProperty())
    .collect(Collectors.toCollection(() -> FXCollections.observableArrayList()));

BooleanBinding change = Bindings.createBooleanBinding(() -> true, list);

Button button = (Button) dialogPane.lookupButton(okButtonType);
button.disableProperty().bind(change.not());
(BooleanProperty[]) list.toArray()
Observable[] dependencies = propertiesList.stream()
                                          .map(DatabasePane::changeProperty)
                                          .toArray(Observable[]::new);

BooleanBinding change = Bindings.createBooleanBinding(() -> true, dependencies);
BooleanBinding change = Bindings.createBooleanBinding(() -> true, list);
BooleanBinding change = Bindings.createBooleanBinding(() -> true, new Observable []{ list });