首页 > 解决方案 > JavaFx - StringConverter.fromString 何时在 DatePicker 中执行

问题描述

我正在尝试自定义 DatePicker,并希望在用户输入无效时为 DatePicker 的 TextField/Editor 添加一个红色边框,并在它变为有效时再次将其删除。我遇到的唯一问题是触发验证,我似乎无法在转换器中执行 fromString 方法(然后更新属性等等......,这一切都很好)。

我的印象是 fromString 方法会在用户输入时执行,但显然它不会,所以我的问题基本上归结为“fromString 方法何时执行”。

标签: javafx

解决方案


何时DatePicker使用转换器无关紧要,但何时要检查转换。您可以简单地text使用editor.

以下代码中的绑定注册了这样一个监听器:

@Override
public void start(Stage primaryStage) throws Exception {
    DatePicker datePicker = new DatePicker();
    TextField editor = datePicker.getEditor();
    StringConverter<LocalDate> converter = datePicker.getConverter();
    editor.styleProperty().bind(Bindings.createStringBinding(() -> {
        try {
            converter.fromString(editor.getText());
        } catch (Exception e) {
            return "-fx-background-color: red;";
        }
        return null;
    }, editor.textProperty()));

    Scene scene = new Scene(new VBox(datePicker), 200, 100);
    primaryStage.setScene(scene);
    primaryStage.show();
}

编辑:当输入文本时使用转换器,Enter在聚焦editor.


推荐阅读