JavaFx-何时在DatePicker中执行StringConverter.fromString

JavaFx-何时在DatePicker中执行StringConverter.fromString,javafx,Javafx,我正在尝试自定义日期选择器,并希望在用户输入无效时向日期选择器的文本字段/编辑器添加一个红色边框,并在其变为有效时将其删除。我唯一的问题是触发验证,我似乎无法让转换器中的fromString方法执行(然后更新属性等…,这一切都很好) 我的印象是,fromString方法会在用户输入时执行,但显然不会,所以我的问题基本上归结为“fromString方法何时执行”。日期选择器何时使用转换器并不重要,但何时需要检查转换。您只需使用编辑器的文本属性的侦听器即可完成此操作 以下代码中的绑定注册了此类侦听器

我正在尝试自定义日期选择器,并希望在用户输入无效时向日期选择器的文本字段/编辑器添加一个红色边框,并在其变为有效时将其删除。我唯一的问题是触发验证,我似乎无法让转换器中的fromString方法执行(然后更新属性等…,这一切都很好)


我的印象是,fromString方法会在用户输入时执行,但显然不会,所以我的问题基本上归结为“fromString方法何时执行”。日期选择器何时使用转换器并不重要,但何时需要检查转换。您只需使用
编辑器
文本
属性的侦听器即可完成此操作

以下代码中的绑定注册了此类侦听器:

@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();
}
@覆盖
public void start(Stage primaryStage)引发异常{
DatePicker DatePicker=新的日期选择器();
TextField editor=datePicker.getEditor();
StringConverter converter=datePicker.getConverter();
editor.styleProperty().bind(Bindings.createStringBinding(()->{
试一试{
fromString(editor.getText());
}捕获(例外e){
返回“-fx背景色:红色;”;
}
返回null;
},editor.textProperty());
场景=新场景(新VBox(日期选择器),200100);
初级阶段。场景(场景);
primaryStage.show();
}


编辑:输入文本时使用的转换器使用Enter“提交”,同时聚焦
编辑器

我知道,但我有点希望触发fromString方法,就像触发toString方法一样,因此我有点困惑,显然我必须“手动”触发它,谢谢您的回答,但我的问题不是“如何获得错误输入的红色边框”我的问题是“为什么fromString方法没有像我预期的那样触发”您所说的“提交”是指“提交”,如
commitValue()
?因为
commitValue()
只会触发
toString()
方法,如果您想知道它的确切调用位置:
ComboBoxPopupControl.handleKeyEvent
并且它只会在按下enter键时触发。。。似乎没有其他代码在使用转换器。