【问题标题】:JavaFX bind to multiple propertiesJavaFX 绑定到多个属性
【发布时间】:2023-03-21 16:01:01
【问题描述】:

我有一个带有文本字段和按钮的简单 fx​​ml。如果文本字段为空,我希望禁用该按钮。所以我在我的控制器中插入如下内容:

@Override
public void initialize(URL url, ResourceBundle bundle) {
  button.disableProperty().bind(textField.textProperty().isEqualTo(""));
}

..这很好用。问题是当我添加第二个文本字段并希望在任一文本字段为空时禁用我的按钮。那该怎么办?我尝试了以下方法,但这不起作用:

@Override
public void initialize(URL url, ResourceBundle bundle) {
  button.disableProperty().bind(textField.textProperty().isEqualTo(""));
  button.disableProperty().bind(textField2.textProperty().isEqualTo(""));
}

【问题讨论】:

    标签: java binding javafx


    【解决方案1】:

    除了 martin_dk 答案之外,如果你想绑定两个以上的属性,你会得到如下代码,看起来很奇怪,但它确实有效。

    BooleanBinding booleanBinding
            = finalEditor.selectedProperty().or(
                    staticEditor.selectedProperty().or(
                            syncEditor.selectedProperty().or(
                                    nativeEditor.selectedProperty().or(
                                            strictEditor.selectedProperty()))));
    
    abstractEditor.disableProperty ().bind(booleanBinding);
    

    【讨论】:

      【解决方案2】:

      除了 Andreys 的方法,我发现你也可以这样做:

          BooleanBinding booleanBinding = 
            textField.textProperty().isEqualTo("").or(
              textField2.textProperty().isEqualTo(""));
      
          button.disableProperty().bind(booleanBinding);
      

      【讨论】:

        【解决方案3】:

        这可以通过Bindings 绑定到布尔表达式来实现:

        button.disableProperty().bind(
            Bindings.and(
                textField.textProperty().isEqualTo(""),
                textField2.textProperty().isEqualTo("")));
        

        【讨论】:

        • .textProperty().isEmpty() - 对我来说似乎是一个更好的方法。
        • 我猜我们使用 'or' 而不是 'and' ,因为如果其中一个字段不为空,'and' 启用按钮,但我们使用 'or' 仅在两个文本字段时启用按钮不为空。
        猜你喜欢
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        • 2011-04-28
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        相关资源
        最近更新 更多