Отключить прошлые даты и 2 недели вперед в JCalendar

Я хочу отключить прошлые даты и 2 недели с этого момента из JCalendar.

У меня уже есть этот код:

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

Я уже могу отключить прошлые даты, но как насчет отключения будущих дат, например, через 2 недели?


person user3331023    schedule 12.10.2014    source источник
comment
Какой API дат вы используете? Это API даты JAVA?   -  person StackFlowed    schedule 12.10.2014
comment
Это JCalendar API :)   -  person user3331023    schedule 12.10.2014


Ответы (3)


Как показано здесь, вы можете использовать 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 для обработки разных диапазонов.

person trashgod    schedule 12.10.2014

Я не пробовал это, но я думаю, что использование даты в будущем сделает это:

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);

Вместо того, чтобы работать с объектом Date и использовать setTime (миллисекунды), вы можете использовать правильный объект Calendar, который имеет лучшие методы для изменения даты и так далее.

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

Я уже ответил на свой вопрос с помощью кода 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

person user3331023    schedule 12.10.2014