JavaFX:检查文本 属性 是否为空白(而不仅仅是空的)
JavaFX: check whether a text property is blank (and not just empty)
我想根据文本字段是否包含任何内容来启用或禁用按钮,我想通过使用 属性 绑定来实现。
所以一开始我在文本字段的文本 属性 上使用了 isEmpty() 方法来为禁用的按钮创建布尔绑定 属性:
startSearchButton.disableProperty().bind(searchField.textProperty().isEmpty());
虽然绑定有效,但我对 "text field contains anything" 的定义与 isEmpty() 方法所做的不同,即仅检查文本长度是否 > 0。但是,我感兴趣的是是否存在"real"文本,即文本字段是否为空白(不仅不为空,而且实际上不仅只有空格)。
不幸的是,没有方法 isBlank(),而且我在绑定实用程序中也找不到任何合适的东西 class。现在我看到您可以通过 Bindings.createBooleanProperty 方法实现您喜欢的任何自定义布尔值 属性,但我还不熟悉定义自定义绑定的概念。我将如何为我的案例实现这样的布尔值 属性?
您可以使用(在许多方法中)Bindings.createBooleanBinding(...)
创建自定义绑定。第一个参数是计算绑定值的函数(您可以使用 trim()
从文本中 trim 空格,然后检查结果是否为空);其余参数是触发重新计算绑定的可观察对象列表。您希望在文本字段中的文本更改时重新计算绑定,因此只需指定文本 属性:
startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() ->
searchField.getText().trim().isEmpty(),
searchField.textProperty());
你也可以这样做:
使用 Apache StringUtils.isBlank()
startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() ->
StringUtils.isBlank(searchField.getText()),
searchField.textProperty());
创建您自己的方法
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());
至于 2022 年
public static BooleanBinding isBlank(StringProperty stringProperty) {
return Bindings.createBooleanBinding(() -> stringProperty.get().isBlank(), stringProperty);
}
public static BooleanBinding isNotBlank(StringProperty stringProperty) {
return isBlank(stringProperty).not();
}
(不知道为什么没有人建议String::isBlank
,可能是后来在Java中添加的)
我想根据文本字段是否包含任何内容来启用或禁用按钮,我想通过使用 属性 绑定来实现。
所以一开始我在文本字段的文本 属性 上使用了 isEmpty() 方法来为禁用的按钮创建布尔绑定 属性:
startSearchButton.disableProperty().bind(searchField.textProperty().isEmpty());
虽然绑定有效,但我对 "text field contains anything" 的定义与 isEmpty() 方法所做的不同,即仅检查文本长度是否 > 0。但是,我感兴趣的是是否存在"real"文本,即文本字段是否为空白(不仅不为空,而且实际上不仅只有空格)。
不幸的是,没有方法 isBlank(),而且我在绑定实用程序中也找不到任何合适的东西 class。现在我看到您可以通过 Bindings.createBooleanProperty 方法实现您喜欢的任何自定义布尔值 属性,但我还不熟悉定义自定义绑定的概念。我将如何为我的案例实现这样的布尔值 属性?
您可以使用(在许多方法中)Bindings.createBooleanBinding(...)
创建自定义绑定。第一个参数是计算绑定值的函数(您可以使用 trim()
从文本中 trim 空格,然后检查结果是否为空);其余参数是触发重新计算绑定的可观察对象列表。您希望在文本字段中的文本更改时重新计算绑定,因此只需指定文本 属性:
startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() ->
searchField.getText().trim().isEmpty(),
searchField.textProperty());
你也可以这样做:
使用 Apache StringUtils.isBlank()
startSearchButton.disableProperty().bind(Bindings.createBooleanBinding(() -> StringUtils.isBlank(searchField.getText()), searchField.textProperty());
创建您自己的方法
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());
至于 2022 年
public static BooleanBinding isBlank(StringProperty stringProperty) {
return Bindings.createBooleanBinding(() -> stringProperty.get().isBlank(), stringProperty);
}
public static BooleanBinding isNotBlank(StringProperty stringProperty) {
return isBlank(stringProperty).not();
}
(不知道为什么没有人建议String::isBlank
,可能是后来在Java中添加的)