如何将2个文本字段和3个复选框中的至少1个绑定到按钮

时间:2018-07-20 18:11:13

标签: java javafx binding

现在我有一个按钮,一旦填写了2个文本字段并且选中了3个复选框中的至少1个,我就希望启用该按钮。到目前为止,这是我所拥有的,但似乎无法达到预期的效果。我非常感谢您的任何投入。预先谢谢你。

button.disableProperty().bind(
   Bindings.isEmpty(textField1.textProperty())
   .or(Bindings.isEmpty(textField2.textProperty()))
   .or(checkBox1.selectedProperty())
   .or(checkBox2.selectedProperty())
   .or(checkBox3.selectedProperty())
);  

2 个答案:

答案 0 :(得分:2)

出于一个简单的原因,我不是非常喜欢链接orandnot以创建表达式。实际的表达式不容易阅读。 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()
));

如果您坚持链接andornot,则应创建以下表达式:

(e1 || e2 || !(s1 || s2 || s3))

其中e1e2代表空白文本字段,s1s2s3代表选定的复选框

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