这是我在 DatePicker 的 TextField 对象上使用的 solition:DatePicker 对象允许在文本字段中插入任何类型的文本。
我认为这个解决方案也可以阻止你。
在示例中,我在 DatePicker 和 TextField 对象上执行此操作。
MyControllerClass.java
@Fxml
private DatePicker datePik;
@Fxml
private TextField textF;
@Override
public void initialize(URL url, ResourceBundle rb) {
String pattern = "dd-MM-yyyy";
datePik.setPromptText(pattern.toLowerCase());
datePik.getEditor().focusedProperty().addListener(new ChangeListener<Boolean>()//focus on the TextField object of the DatePicker
{
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue){
if (newPropertyValue == false){
try {
SimpleDateFormat sdf = new SimpleDateFormat(datePik.getEditor().getText());
sdf.setLenient(false);
//if not valid, it will throw ParseException
Date date = sdf.parse(datePik.getEditor().getText());
//System.out.println(date);
} catch (Exception e) {
e.printStackTrace();
datePik.getEditor().setText("");
}
}
};
});
textF.focusedProperty().addListener(new ChangeListener<Boolean>()//focus on the TextField object
{
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue){
if (newPropertyValue == false){
try {
SimpleDateFormat sdf = new SimpleDateFormat(textF.getText());
sdf.setLenient(false);
//if not valid, it will throw ParseException
Date date = sdf.parse(textF.getText());
//System.out.println(date);
} catch (Exception e) {
e.printStackTrace();
textF.setText("");
}
}
};
});
}
您也可以使用对象 SimpleDateFormat 来检查正确的时间http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
再见