现在我有一个按钮,一旦填写了2个文本字段并且选中了3个复选框中的至少1个,我就希望启用该按钮。到目前为止,这是我所拥有的,但似乎无法达到预期的效果。我非常感谢您的任何投入。预先谢谢你。
button.disableProperty().bind(
Bindings.isEmpty(textField1.textProperty())
.or(Bindings.isEmpty(textField2.textProperty()))
.or(checkBox1.selectedProperty())
.or(checkBox2.selectedProperty())
.or(checkBox3.selectedProperty())
);
答案 0 :(得分:2)
出于一个简单的原因,我不是非常喜欢链接or
,and
和not
以创建表达式。实际的表达式不容易阅读。 Bindings.createBooleanBinding
产生的代码更易于阅读:
button.disableProperty().bind(Bindings.createBooleanBinding(
() -> {
if (textField1.getText().isEmpty() || textField2.getText().isEmpty()) {
return true;
}
return !(checkBox1.isSelected() || checkBox2.isSelected() || checkBox3.isSelected());
},
textField1.textProperty(), textField1.textProperty(), checkBox1.selectedProperty(), checkBox2.selectedProperty(), checkBox3.selectedProperty()
));
如果您坚持链接and
,or
和not
,则应创建以下表达式:
(e1 || e2 || !(s1 || s2 || s3))
其中e1
和e2
代表空白文本字段,s1
,s2
,s3
代表选定的复选框
button.disableProperty().bind(
textField1.textProperty().isEmpty()
.or(textField2.textProperty().isEmpty())
.or(
checkBox1.selectedProperty()
.or(checkBox2.selectedProperty())
.or(checkBox3.selectedProperty()).not())
);
答案 1 :(得分:0)
好的,我实际上尝试了下面列出的解决方案。这似乎起作用,因为它需要填写2个文本字段并选中3个复选框中的至少1个。
button.disableProperty().bind(
Bindings.isEmpty(textField1.textProperty())
.and(Bindings.isEmpty(textField2.textProperty()))
.or(checkBox1.selectedProperty().not())
.and(checkBox2.selectedProperty().not())
.and(checkBox3.selectedProperty().not())
);