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