У меня есть JCalendar
propertyChangeListener, в котором я получаю новую выбранную дату, используя Calendar newValue = (Calendar) evt.getNewValue()
.В тех случаях, когда старая дата равна 31, а новый выбранный месяц является одним из 30 дней месяца, когда я пытаюсь получить значение newValue.getTime()
, возвращается неверная дата (1-е число старого месяца в JCalendar 1.2 и 30-е число старого месяцав Jcalendar 1.4).Если я наберу setLenient=true
, он выдаст Error: java.lang.IllegalArgumentException: MONTH
.
Можно ли как-нибудь проверить старые и новые дату и месяц и настроить их в соответствии с требованиями?
Воткод:
myCalendar.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("calendar")) {
Calendar updatedValue = (Calendar) evt.getNewValue();
System.out.println(updatedValue); //Prints Month as 10 (Nov) and day as 31
System.out.println(updatedValue.getTime()); //Prints Month as 11 (Dec) and day as 1
}
}
}
Пример: текущая выбранная дата -> 31 декабря 2018 года возврат календаря -> YEAR=2018,MONTH=11,WEEK_OF_YEAR=48,WEEK_OF_MONTH=1,DAY_OF_MONTH=31
Изменение месяца на возвращение календаря ноября -> YEAR=2018,MONTH=10,WEEK_OF_YEAR=1,WEEK_OF_MONTH=6,DAY_OF_MONTH=31
, что на самом деле неверно(нет 31 day_of_month в месяце 10 (ноябрь)) И 1 декабря выбирается в JCalendar.Я хочу, чтобы 30 ноября был выбран.
Проблема в том, что propertyChangeListener вызывается дважды.Предположим, моя дата - 31 декабря, и я установил ее на 30 ноября. В первый раз дата меняется на 30 декабря (я думаю, что она попадает в диапазон ноября), а во второй раз она меняет дату на 30 ноября. Это видно, еслиЯ печатаю только evt.getNewValue (), но если я пытаюсь установить дату, вызывая некоторые другие методы, она застревает только 30 декабря!