有没有办法让文本框以dd/mm/yyyy格式验证并且不允许任何其他字符?我已经设法验证它,所以它只是数字,但有数字和斜线被证明是一个问题。
我正在使用JAVAFX。
有没有办法让文本框以dd/mm/yyyy格式验证并且不允许任何其他字符?我已经设法验证它,所以它只是数字,但有数字和斜线被证明是一个问题。
我正在使用JAVAFX。
我创建了一个基于文本框的日期控件:https ://github.com/nablex/jfx-control-date/ 它允许您设置格式(由 SimpleDateFormat 支持)并支持鼠标选择的弹出窗口。
您还可以通过键入来输入值(仅允许有效值)并使用箭头按钮浏览字段(左右将浏览,上下将增加/减少)。
一些示例代码(也可以在 github 上的测试类中找到):
DatePicker picker = new DatePicker();
// you may not want the controls to manipulate time, they are on by default however
picker.setHideTimeControls(true);
// optional: the format you want the date to be in for the user
picker.formatProperty().setValue("yyyy/MM/dd HH:mm:ss.SSS");
// optional: set timezone
picker.timezoneProperty().setValue(TimeZone.getTimeZone("CET"));
// optional: set locale
picker.localeProperty().setValue(new Locale("nl"));
// react to changes
picker.timestampProperty().addListener(new ChangeListener<Long>() {
@Override
public void changed(ObservableValue<? extends Long> arg0, Long oldValue, Long newValue) {
// do something
}
});
更新
添加了过滤器逻辑。如果您设置过滤器,您可以限制用户可以输入的日期。不可接受的日期将在 GUI 中显示为灰色,并且用户也将无法在文本字段中手动输入它们。
例如,此过滤器将阻止随机时间点之前的任何日期:
picker.filterProperty().setValue(new DateFilter() {
@Override
public boolean accept(Date date) {
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd");
try {
return date.after(parser.parse("2010-07-13"));
}
catch (ParseException e) {
return false;
}
}
});