2015-04-01 36 views
0

我有一個CalendarPicker EventFilter。在EventFilter中,我想使用CalendarPicker.getDisplayedCalendar()顯示日曆,但我得到錯誤的日期。這是CalendarPicker更新顯示的日曆之前的最後一個日期。
看起來我的EventFilter是在CalendarPicker的標準事件之前執行的。
而且我無法使用EventHandler,因爲CalendarPicker會使用該事件。
例如:
- 我在CalendarPicker中看到2015年3月。
- 將月份更改爲2015年4月
- 在CalendarPiker.addEventFilter()中使用CalendarPicker.getDisplayedCalendar()獲取「2015-03-01」
- CalendarPicker顯示2015年4月

如何在執行標準事件之前我的EventFilter?

下面是一些代碼:jfxtras EventFilter中的CalendarPicker getDisplayedCalendar錯誤

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

如果我選擇在calendarpicker的日期,一切都是O.K.
selectedDate是選擇的日期,顯示的日曆是顯示的月份的第1天。
如果我使用微調器更改月份或年份,selectedDate不會更改(我認爲這是正確的,因爲我沒有選擇一個日期),但顯示的日期是我更改之前的月份的第1個日期月(例如,從四月到三月的變化=> 01.04.2015而不是01.03.2015)。

+0

你能否提供一個小例子,以便我可以重現你在做什麼? – tbeernot 2015-04-01 16:50:24

+0

我一直在想你的問題;是否有理由認爲日曆屬性的更改必須在您正在監控的事件之前完成?事件按照某種順序被觸發,並且在事件過濾器事件觸發之前,我無法找到有關該屬性的任何文檔。 – tbeernot 2015-04-01 17:29:39

+0

對不起,對於我已故的答案。東部假期。我在我的問題中添加了一些代碼並解釋我的意思。 – boop 2015-04-07 12:11:29

回答

0

我明白你想要什麼。然而,事件是按照某種順序被解僱的,並且沒有規定應該是什麼順序的規則。在這種情況下,沒有任何規定必須在任何屬性發生更改後觸發鼠標單擊事件。

你是不是聽錯了事件?如果要在顯示的CalendarProperty()上註冊監聽器,則無論觸發它(鼠標單擊,鍵盤導航 - ListSpinner支持,還是編程),都會通知您顯示的日期何時更改。

+0

Yesss,就是這樣!在calendarpicker.displayedCalendar()上添加一個ChangeListener – boop 2015-04-10 09:36:37