日期格式化文本框

时间:2013-09-26 11:59:22

标签: java date formatting javafx

有没有办法让文字框以 dd / mm / yyyy 格式验证,并且不允许任何其他字符?我已经设法验证它,所以它只是数字,但数字和斜线被证明是一个问题。

我正在使用 JAVAFX

1 个答案:

答案 0 :(得分:4)

我创建了一个基于文本框的日期控件: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;
            }
        }
    });