在JCalendar中禁用过去的日期和2周后

时间:2014-10-12 03:07:31

标签: java swing jcalendar jdatechooser

我希望从JCalendar开始禁用过去的日期和2周后。

我已经有了这段代码:

jDateChooser1.getJCalendar().setMinSelectableDate(new Date());
((JTextFieldDateEditor)jDateChooser1.getDateEditor()).setEditable(false);

我已经可以停用过去的日期,但是从现在起2周后如何禁用未来日期?

3 个答案:

答案 0 :(得分:3)

如图here所示,您可以使用IDateEvaluator MinMaxDateEvaluator来使一系列日期无效:

private static class RangeEvaluator extends MinMaxDateEvaluator {

    @Override
    public boolean isInvalid(Date date) {
        return !super.isInvalid(date);
    }
}

然后您可以指定一系列无效日期,例如前一天和后两周:

    Calendar min = Calendar.getInstance();
    min.add(Calendar.DAY_OF_MONTH, -1);
    Calendar max = Calendar.getInstance();
    max.add(Calendar.DAY_OF_MONTH, 13);
    RangeEvaluator re = new RangeEvaluator();
    re.setMinSelectableDate(min.getTime());
    re.setMaxSelectableDate(max.getTime());
    JCalendar jc = new JCalendar();
    jc.getDayChooser().addDateEvaluator(re);
    jc.setCalendar(jc.getCalendar());

请注意,您可以添加RangeEvaluator的多个实例来处理不同的范围。

答案 1 :(得分:1)

我没试过这个,但我想在将来使用日期会这样做:

Date d = new Date();
d.setTime(d.getTime() + 14 * 86400 * 1000); -- set the date 14 days forward
jDateChooser1.getJCalendar().setMinSelectableDate(d);
((JTextFieldDateEditor)jDateChooser1.getDateEditor()).setEditable(false);

您可能希望使用正确的Calendar对象,而不是使用Date对象并且必须使用setTime(毫秒),而该对象具有更好的方法来更改日期等等。

Calendar cal = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 14);
Date twoweeks = calendar.getTime();

答案 2 :(得分:1)

我已经在trashgod的代码的帮助下回答了我自己的问题。

下面:

Calendar min = Calendar.getInstance();
min.add(Calendar.DAY_OF_MONTH, 15);
Calendar max = Calendar.getInstance();
max.add(Calendar.DAY_OF_MONTH, 2000000);
RangeEvaluator re = new RangeEvaluator();
re.setMinSelectableDate(min.getTime());
re.setMaxSelectableDate(max.getTime());
// JCalendar jc = new JCalendar();


 jDateChooser1.getJCalendar().setMinSelectableDate(min.getTime());
 jDateChooser1.getJCalendar().setMaxSelectableDate(max.getTime());
((JTextFieldDateEditor)jDateChooser1.getDateEditor()).setEditable(false);

谢谢! :d