JavaFx-何时在DatePicker中执行StringConverter.fromString
我正在尝试自定义日期选择器,并希望在用户输入无效时向日期选择器的文本字段/编辑器添加一个红色边框,并在其变为有效时将其删除。我唯一的问题是触发验证,我似乎无法让转换器中的fromString方法执行(然后更新属性等…,这一切都很好)JavaFx-何时在DatePicker中执行StringConverter.fromString,javafx,Javafx,我正在尝试自定义日期选择器,并希望在用户输入无效时向日期选择器的文本字段/编辑器添加一个红色边框,并在其变为有效时将其删除。我唯一的问题是触发验证,我似乎无法让转换器中的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键时触发。。。似乎没有其他代码在使用转换器。