Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:如何绑定文本字段;“样式属性”;匹配某些模式的文本属性_Java_User Interface_Javafx_Fxml - Fatal编程技术网

JavaFX:如何绑定文本字段;“样式属性”;匹配某些模式的文本属性

JavaFX:如何绑定文本字段;“样式属性”;匹配某些模式的文本属性,java,user-interface,javafx,fxml,Java,User Interface,Javafx,Fxml,在我的应用程序中,我有一个屏幕,屏幕上有三个需要验证的字段,还有一个保存按钮 我将保存按钮“disable property”绑定到字段的“text property”中,该属性与某些模式匹配(本例中的简化模式无关紧要): 因此,保存按钮将被锁定,直到所有值都正确: 但我需要用一些红色边框来突出显示不正确的字段,如 -fx-border-color: red; 我的主要目标是在一个地方处理这个问题,而不是添加几个侦听器。 是否可以在上面的代码中以某种方式对此进行bing,或者我需要向每个字段

在我的应用程序中,我有一个屏幕,屏幕上有三个需要验证的字段,还有一个保存按钮

我将保存按钮“disable property”绑定到字段的“text property”中,该属性与某些模式匹配(本例中的简化模式无关紧要):

因此,保存按钮将被锁定,直到所有值都正确:

但我需要用一些红色边框来突出显示不正确的字段,如

-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
,并将此绑定行为直接添加到其中。这样就不必分别绑定每个字段。