jfxtras - EventFilter 中的 CalendarPicker getDisplayedCalendar 错误

jfxtras - CalendarPicker getDisplayedCalendar in EventFilter wrong

我有一个带有 EventFilter 的 CalendarPicker。在 EventFilter 中,我想要带有 CalendarPicker.getDisplayedCalendar() 的 displayedCalendar,但我得到了错误的日期。这是 CalendarPicker 更新 displayedCalendar 之前的最后一个日期。
看来我的 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()));
      }
    }
  }
});

如果我在日历选择器中选择一个日期,一切都是 o.k。
selectedDate 是选择的日期,显示的日历是显示月份的第 1 天。
如果我使用微调器更改月份或年份,selectedDate 不会更改(我认为这是正确的,因为我没有 select 一个日期),但显示的日期是第一个日期在我更改月份之前的那个月(例如,从四月更改为三月 => 01.04.2015 而不是 01.03.2015)。

我明白你想要什么。然而,事件是按某种顺序触发的,并且没有规定应该是什么顺序的规则。在这种情况下,没有任何内容要求在更改任何属性后必须触发鼠标单击事件。

你是不是听错了事件?如果您要在 displayedCalendarProperty() 上注册一个侦听器,您将在显示的日期更改时收到通知,无论触发它的是什么(鼠标单击、键盘导航 -ListSpinner 支持那个 - 或以编程方式)。