
我在上面添加的错误日志给出了答案。您可以通过以下代码访问文本框的字符串值:
datePicker.getEditor().getText();
因此,可以通过以下方式设置文本框的值:
datePicker.setValue(datePicker.getConverter() .fromString(datePicker.getEditor().getText()));
我向失焦事件添加了一个事件,这将强制更新datepicker值
和工作代码:
public DatePicker getDatePicker(DtDate defaultDate, int width){ DatePicker dtpckr = new DatePicker(); dtpckr.setMaxWidth(width); dtpckr.setMinWidth(width); dtpckr.setConverter(new StringConverter<LocalDate>() { private DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy/MM/dd"); @Override public String toString(LocalDate localDate) { if(localDate==null) return ""; return dateTimeFormatter.format(localDate); } @Override public LocalDate fromString(String dateString) { if(dateString==null || dateString.trim().isEmpty()) return null; try{ return LocalDate.parse(dateString,dateTimeFormatter); } catch(Exception e){ //Bad date value entered return null; } } }); dtpckr.setpromptText("yyyy/MM/dd"); dtpckr.setValue(LocalDate.parse(defaultDate.toString(), DateTimeFormatter.ofPattern("yyyy/MM/dd"))); //This deals with the bug located here where the datepicker value is not updated on focus lost //https://bugs.openjdk.java.net/browse/JDK-8092295?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel dtpckr.focusedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(Observablevalue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { if (!newValue){ dtpckr.setValue(dtpckr.getConverter().fromString(dtpckr.getEditor().getText())); } } }); return dtpckr;}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)