JavaFX 8:有没有办法将布尔值转换为ObservableBooleanValue或BooleanBinding?

时间:2016-12-22 09:15:08

标签: javafx-8

我试图将按钮的禁用属性绑定到2个可观察对象中:
1.如果在特定表格上没有选择数据
2.如果在同一张桌子上选择了多于1个数据。

做类似的事情:

button.disableProperty().bind(Bindings.and(Bindings.isEmpty(myTable.getSelectionModel().getSelectedItems()),
    myTable.getSelectionModel().getSelectedItems().size() > 1));

' Bindings.and'不允许我这样做,并给出以下错误:
" Bindings类型中的方法和(ObservableBooleanValue,ObservableBooleanValue)不适用于参数(BooleanBinding,boolean)"

我知道它允许2个BooleanBindings,因此我试图像第二个条件一样投射

(BooleanBinding) myTable.getSelectionModel().getSelectedItems().size() > 1

(ObservableBooleanValue) myTable.getSelectionModel().getSelectedItems().size() > 1

并且两者都受到限制。

提前致谢!

1 个答案:

答案 0 :(得分:3)

你不能做这样的事情的原因是boolean是一个原始值 - 你不能把它投射到一个可观察的,因为它无法知道基础值何时改变。

您需要创建一个绑定,只要底层值发生更改,它就会更新。幸运的是,Bindings类有方便的方法来帮助它。在您的情况下,您需要将ObservableList转换为可观察的整数,然后检查它是否大于1:

Bindings.size(myTable.getSelectionModel().getSelectedItems()).greaterThan(1) 

这将为您提供BooleanBinding,其值反映是否选择了多个项目。

作为附注 - 如果选择为空,则表示选择的项目恰好为零,因此我认为您的意思可能是or而不是and,因为您的条件是互斥的。