我有一个带有 EventFilter 的 CalendarPicker。在 EventFilter 中,我想要使用 CalendarPicker.getDisplayedCalendar() 显示的日历,但我得到了错误的日期。这是 CalendarPicker 更新显示日历之前的最后日期。
似乎我的 EventFilter 是在 CalendarPicker 的标准事件之前执行的。
而且我不能使用 EventHandler,因为该事件由 CalendarPicker 使用。
例如:
- 我在 CalendarPicker 中看到 2015 年 3 月。
- 将月份更改为 2015 年 4 月
- 在 CalendarPiker.addEventFilter() 中,我使用 CalendarPicker.getDisplayedCalendar() "2015-03-01"
- CalendarPicker 显示 2015 年 4 月
如何在 EventFilter 之前执行标准事件?
这是一些代码:
calendarpicker.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getButton().equals(MouseButton.PRIMARY)) {
Calendar cal = calendarpicker.getCalendar();
if (cal != null) {
selectedDate = cal.getTime();
log.debug(String.format("(selectedDate): %s" , selectedDate));
log.debug(String.format("(displayed): %s" , calendarpicker.getDisplayedCalendar().getTime()));
}
}
}
});
如果我在日历选择器中选择一个日期,一切正常
selectedDate 是选择的日期,显示的日历是显示月份的第一天。
如果我使用微调器更改月份或年份,则 selectedDate 不会更改(我认为这是正确的,因为我没有选择一个日期),但显示的日期是我更改月份前一个月的第 1 个日期(例如,从 4 月更改为 3 月 => 01.04.2015 而不是 01.03.2015)。