在java swing jdatepicker中将最大日期值设置为今天

时间:2015-10-23 15:27:57

标签: java

我想使用jdatepicker进行生日输入。 是否有任何方法或属性或任何其他方式在jdatepicker中设置最大日期。

使用jdatepicker 1.3.4

查看以下代码
UtilDateModel model = new UtilDateModel();
    Properties p = new Properties();
    p.put("text.today", "Today");
    p.put("text.month", "Month");
    p.put("text.year", "Year");
    JDatePanelImpl datePanel = new JDatePanelImpl(model, p);
    JDatePickerImpl datePicker = new JDatePickerImpl(datePanel,
            new DateLabelFormatter());

我已经实现了DateLabelFormatter类来进行日期格式化。 虽然我会提供。

public class DateLabelFormatter extends AbstractFormatter {

private SimpleDateFormat dateFormatter = new SimpleDateFormat(Constants.DATE_FORMAT_DDMMMYYYY);

public Object stringToValue(String text) throws ParseException {
    return dateFormatter.parseObject(text);
}

public String valueToString(Object value) throws ParseException {
    if (value != null) {
        Calendar cal = (Calendar) value;
        return dateFormatter.format(cal.getTime());
    }

    return "";
}}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我无法修复它。但我尝试使用JCalendar库http://toedter.com/jcalendar/,现在它正在使用方法setMaxSelectableDate。

这是我的代码:

JDateChooser chooser = new JDateChooser();
chooser.setMaxSelectableDate(new Date());
chooser.setDateFormatString("dd-MM-yyyy");
chooser.setDate(new Date());

答案 1 :(得分:0)

我知道这有点晚了,但是我决定将其发布,以防有​​人需要。

我如何使用DateLabelFormatter类将日期选择器的最大日期限制为今天。

class DateLabelFormatter extends AbstractFormatter {

private String datePattern = "yyyy-MM-dd";
private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern);

@Override
public Object stringToValue(String text) throws ParseException {
    return dateFormatter.parseObject(text);
}

@Override
public String valueToString(Object value) throws ParseException {
    if (value != null) {
        Calendar cal = (Calendar) value;
        Calendar today = Calendar.getInstance();

        if (cal.getTime().after(today.getTime())) return dateFormatter.format(today.getTime());

        return dateFormatter.format(cal.getTime());
    }

    return "";
}}

这不是一个很好的解决方案,因为在日期选择器的今天之后的任何日期都没有未禁用。此解决方案仅检查选定的日期,如果选定的日期晚于指定的日期(今天),它将返回今天的日期的值。