JavaFX:检查文本属性是否为空(而不仅仅是空)

时间:2016-03-11 19:24:36

标签: javafx property-binding

我希望根据文本字段是否包含任何内容启用或禁用按钮,我想通过使用属性绑定来实现它。

首先,我在文本字段的text属性上使用isEmpty()方法为按钮的禁用属性创建一个布尔绑定:

startSearchButton.disableProperty().bind(searchField.textProperty().isEmpty());

虽然绑定有效,但我对"文本字段的定义包含任何内容"与isEmpty()方法的不同之处在于,即只检查文本的长度是否为>但是,我对是否存在"真实"感兴趣。文本,即文本字段是否为空白(不仅不是空的,而且实际上不仅仅是空格)。

不幸的是没有方法isBlank(),我也无法在Bindings实用程序类中找到任何合适的东西。现在我看到你可以通过Bindings.createBooleanProperty方法实现你喜欢的任何自定义布尔属性,但是我还不熟悉定义自定义绑定的概念。我如何为我的案例实现这样的布尔属性?

2 个答案:

答案 0 :(得分:7)

您可以使用(在许多方法中)Bindings.createBooleanBinding(...)创建自定义绑定。第一个参数是一个计算绑定值的函数(您可以使用trim()从文本中修剪空格,然后检查结果是否为空);其余参数是触发重新计算绑定的可观察对象列表。您希望在文本字段中的文本更改时重新计算绑定,因此只需指定文本属性:

startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() -> 
    searchField.getText().trim().isEmpty(),
    searchField.textProperty());

答案 1 :(得分:-1)

您也可以这样做:

  1. 使用Apache StringUtils.isBlank()

    startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() -> 
        StringUtils.isBlank(searchField.getText()),
        searchField.textProperty());
    
  2. 创建自己的方法

    public static boolean IsNullOrWhitespace(String s) {
            if(s == null) {
                return true;
            }
    
            for(int i = 0; i < s.length(); ++i) {
                if(!Character.isWhitespace(s.charAt(i))) {
                    return false;
                }
    
            }
            return true;
        }
    

然后:

    startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() -> 
            IsNullOrWhitespace(searchField.getText()),
            searchField.textProperty());
相关问题