0

我有一个带有 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)。

4

1 回答 1

0

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

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

于 2015-04-08T12:45:43.463 回答