在TextFields为空时不起作用时禁用Button

时间:2014-04-21 09:06:31

标签: button javafx javafx-2 textfield

BooleanBinding bb = new BooleanBinding() {
    {
       super.bind(addnum.textProperty(),addt1.textProperty(),addt2.textProperty(),
               addt3.textProperty(),addasg.textProperty(),addatt.textProperty());
    }
    @Override
    protected boolean computeValue() {
      return (addnum.getText().isEmpty() && addt1.getText().isEmpty()
            && addt2.getText().isEmpty() && addt3.getText().isEmpty()
            && addasg.getText().isEmpty() && addatt.getText().isEmpty());
       }
    };

    final Button b2 = new Button("Add");
    b2.disableProperty().bind(bb);

这是我的代码,当TextFields为空时禁用Button,也就是说,当所有TextField都被填充时,Button变为活动状态。但是这段代码不起作用。填充一个TextField时,Button变为活动状态。我在我的项目的其他部分使用此代码为此目的添加它在那里工作正常。为什么不在这里工作?

1 个答案:

答案 0 :(得分:2)

当且仅当所有字段都填满(即非空)时,您希望Button处于活动状态,那么您使用的是错误的运算符。使用||代替&&使其正常工作。

如果您使用DeMorgan的法律从computeValue重新制定公式,您可以轻松地看出错误。我写了

a1, a2, ..., a6

而不是

`addnum.getText().isEmpty()`, `addt1.getText().isEmpty()`, ..., `addatt.getText().isEmpty()`:

以下陈述是等效的:

  • 按钮处于活动状态
  • !(a1 && a2 && ... && a6)
  • (!a1 || !a2 ||...|| !a6)
  • 至少填写一个字段

与使用||代替&&的情况相反:

以下陈述是等效的:

  • 按钮处于活动状态
  • !(a1 || a2 || ... || a6)
  • (!a1 && !a2 &&...&& !a6)
  • 所有字段都已填写