gpt4 book ai didi

java - 仅在使用 ValidationSupport 提交后验证 JavaFX 表单

转载 作者:行者123 更新时间:2023-12-02 00:48:05 25 4
gpt4 key购买 nike

我正在尝试使用 ValidationSupport 验证 javafx 表单,验证正在工作,但是当我访问表单时,即使在提交表单或聚焦文本字段之前,也已经显示了“错误装饰”。

ValidationSupport validationSupport = new ValidationSupport();
validationSupport.registerValidator(textField, Validator.createEmptyValidator("Text is required"));

下图显示了初始状态下的表单示例。

My Form

如何强制装饰仅在用户提交表单或更改 TextField 值后才显示?

最佳答案

按需验证控件是 ControlsFx 问题跟踪器上的一个问题 ( on-demand validation option ),该问题仍处于开放状态,因此 ControlsFx 尚不支持它。

但是有一种方法可以抑制错误修饰:

ValidationSupport validationSupport = new ValidationSupport();
validationSupport.setErrorDecorationEnabled(false);

稍后,当您真正想要验证时(例如在提交按钮上),您需要将其重置为默认值:

validationSupport.setErrorDecorationEnabled(true);
validationSupport.redecorate();

这样,字段仍然会通过每次更改进行验证,但错误装饰不会显示,直到您真正希望显示它们为止。

<小时/>

示例:

在此示例中,我们希望仅当数字字段具有焦点时才看到验证错误。

public class Sandbox extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
GridPane pane = new GridPane();
pane.add(new Label("Number field:"), 0 , 0);
TextField numberField = new TextField("");
pane.add(numberField, 1, 0);
TextField textField = new TextField("");
pane.add(new Label("Text field:"), 0, 1);
pane.add(textField, 1, 1);

ValidationSupport vs = new ValidationSupport();
vs.setErrorDecorationEnabled(false); // we don't want errors to bother us for now.
vs.registerValidator(numberField, Validator.createRegexValidator("must be digits only!", "\\d*", Severity.ERROR));

// validate and show errors only if number field has the focus
vs.errorDecorationEnabledProperty().bind(numberField.focusedProperty());

primaryStage.setScene(new Scene(pane));
primaryStage.show();
}

public static void main(String[] args) {
Application.launch(Sandbox.class);
}
}

或者如果您只想在第一次单击提交按钮后看到验证错误:

        ...
Button button = new Button("Submit");
pane.add(button, 0, 2);

ValidationSupport vs = new ValidationSupport();
vs.setErrorDecorationEnabled(false); // we don't want errors to bother us for now.
vs.registerValidator(numberField, Validator.createRegexValidator("must be digits only!", "\\d*", Severity.ERROR));


button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
vs.setErrorDecorationEnabled(true); // validate and show errors now!
}
});
...

关于java - 仅在使用 ValidationSupport 提交后验证 JavaFX 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com