JavaFX:如何绑定文本字段;“样式属性”;匹配某些模式的文本属性
在我的应用程序中,我有一个屏幕,屏幕上有三个需要验证的字段,还有一个保存按钮 我将保存按钮“disable property”绑定到字段的“text property”中,该属性与某些模式匹配(本例中的简化模式无关紧要): 因此,保存按钮将被锁定,直到所有值都正确: 但我需要用一些红色边框来突出显示不正确的字段,如JavaFX:如何绑定文本字段;“样式属性”;匹配某些模式的文本属性,java,user-interface,javafx,fxml,Java,User Interface,Javafx,Fxml,在我的应用程序中,我有一个屏幕,屏幕上有三个需要验证的字段,还有一个保存按钮 我将保存按钮“disable property”绑定到字段的“text property”中,该属性与某些模式匹配(本例中的简化模式无关紧要): 因此,保存按钮将被锁定,直到所有值都正确: 但我需要用一些红色边框来突出显示不正确的字段,如 -fx-border-color: red; 我的主要目标是在一个地方处理这个问题,而不是添加几个侦听器。 是否可以在上面的代码中以某种方式对此进行bing,或者我需要向每个字段
-fx-border-color: red;
我的主要目标是在一个地方处理这个问题,而不是添加几个侦听器。
是否可以在上面的代码中以某种方式对此进行bing,或者我需要向每个字段添加侦听器 通过向绑定添加侦听器解决,该绑定向接收的文本字段添加样式:
private BooleanBinding textPropertyBindingPattern(TextField textField, Pattern pattern) {
BooleanBinding binding = Bindings.createBooleanBinding(() ->
!pattern.matcher(textField.getText()).matches(), textField.textProperty());
applyValidationClass(textField, binding.get());
binding.addListener((obs, oldValue, newValue) -> {
applyValidationClass(textField, newValue);
});
return binding ;
}
private void applyValidationClass(TextField textField, boolean isInvalid) {
textField.pseudoClassStateChanged(PseudoClass.getPseudoClass("incorrect-value"), isInvalid);
}
CSS文件中描述的“错误值”:
TextField:incorrect-value {
-fx-border-color: red;
}
可视化:通过向绑定添加侦听器解决,该绑定向接收的文本字段添加样式:
private BooleanBinding textPropertyBindingPattern(TextField textField, Pattern pattern) {
BooleanBinding binding = Bindings.createBooleanBinding(() ->
!pattern.matcher(textField.getText()).matches(), textField.textProperty());
applyValidationClass(textField, binding.get());
binding.addListener((obs, oldValue, newValue) -> {
applyValidationClass(textField, newValue);
});
return binding ;
}
private void applyValidationClass(TextField textField, boolean isInvalid) {
textField.pseudoClassStateChanged(PseudoClass.getPseudoClass("incorrect-value"), isInvalid);
}
CSS文件中描述的“错误值”:
TextField:incorrect-value {
-fx-border-color: red;
}
可视化:我建议分别绑定每个属性。因此,可以将字段的边框或样式属性绑定到其文本。如果您有许多这样的字段,可以创建子类
TextField
,并将此绑定行为直接添加到其中。这样就不必单独绑定每个字段。我建议单独绑定每个属性。因此,可以将字段的边框或样式属性绑定到其文本。如果您有许多这样的字段,可以创建子类TextField
,并将此绑定行为直接添加到其中。这样就不必分别绑定每个字段。