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

use*_*736 3 javafx property-binding

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

所以一开始我在文本字段的text属性上使用了isEmpty()方法来为按钮的disabled属性创建一个布尔绑定:

startSearchButton.disableProperty().bind(searchField.textProperty().isEmpty());
Run Code Online (Sandbox Code Playgroud)

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

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

Jam*_*s_D 8

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

startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() -> 
    searchField.getText().trim().isEmpty(),
    searchField.textProperty());
Run Code Online (Sandbox Code Playgroud)