【问题标题】:Disabling Button while TextFields empty not workingTextFields为空时禁用按钮不起作用
【发布时间】:2014-06-05 07:52:21
【问题描述】:
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 变为活动状态。我曾在我项目的其他部分出于同样的目的使用此代码,添加它在那里工作正常。为什么它在这里不起作用?

【问题讨论】:

  • 所以你的问题是代码完全按照它应该做的?如果一个 TextField 不为空,那么显然并非所有 TextField 都是空的,因此该按钮不应再被禁用,即它应该处于活动状态。还是我做错了什么?
  • @fabian 只有当所有 TextFields 都不为空时,该按钮才会变为活动状态。

标签: button javafx javafx-2 textfield


【解决方案1】:

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

如果您使用德摩根定律从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)
  • 所有字段均已填写

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2016-07-20
    相关资源
    最近更新 更多