Button 文本字段为空时禁用按钮不工作

Button 文本字段为空时禁用按钮不工作,button,javafx,javafx-2,textfield,Button,Javafx,Javafx 2,Textfield,这是我在文本字段为空时禁用按钮的代码,即当所有文本字段都已填充时,按钮变为活动状态。但是这个代码不起作用。当一个文本字段被填充时,按钮变为活动状态。我已经在我的项目的其他部分使用了这段代码,用于同样的目的,并且在那里工作得很好。为什么它不在这里工作?如果您希望按钮在且仅在所有字段都已填充(即不为空)的情况下处于活动状态,则您使用了错误的运算符。使用|而不是&&使其工作 如果您使用DeMorgan定律从computeValue重新格式化公式,您可以很容易地看出问题所在;我写 BooleanBind

这是我在文本字段为空时禁用按钮的代码,即当所有文本字段都已填充时,按钮变为活动状态。但是这个代码不起作用。当一个文本字段被填充时,按钮变为活动状态。我已经在我的项目的其他部分使用了这段代码,用于同样的目的,并且在那里工作得很好。为什么它不在这里工作?

如果您希望
按钮在且仅在所有字段都已填充(即不为空)的情况下处于活动状态,则您使用了错误的运算符。使用
|
而不是
&&
使其工作

如果您使用DeMorgan定律从
computeValue
重新格式化公式,您可以很容易地看出问题所在;我写

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);
而不是

a1, a2, ..., a6
以下陈述是等效的:

  • 按钮处于活动状态
  • !(a1&&a2&&…&&a6)
  • (!a1 | | |!a2 | | |……| |!a6)
  • 至少有一个字段已填充
与使用
|
而不是
&
相比:

以下陈述是等效的:

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

如果您希望
按钮在且仅当所有字段都已填充(即非空)时处于活动状态,则说明您使用了错误的运算符。使用
|
而不是
&&
使其工作

如果您使用DeMorgan定律从
computeValue
重新格式化公式,您可以很容易地看出问题所在;我写

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);
而不是

a1, a2, ..., a6
以下陈述是等效的:

  • 按钮处于活动状态
  • !(a1&&a2&&…&&a6)
  • (!a1 | | |!a2 | | |……| |!a6)
  • 至少有一个字段已填充
与使用
|
而不是
&
相比:

以下陈述是等效的:

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

那么,您的问题是,代码确实执行了它应该执行的操作???如果一个文本字段不为空,则显然并非所有文本字段都为空,因此按钮不应再被禁用,即按钮应处于活动状态。还是我搞错了?@fabian只有当所有的文本字段都不是空的时候,按钮才会激活。所以你的问题是代码完全按照它应该做的做了???如果一个文本字段不为空,则显然并非所有文本字段都为空,因此按钮不应再被禁用,即按钮应处于活动状态。还是我搞错了?@fabian只有当所有文本字段都不为空时,按钮才会激活。