2017-02-10 55 views
0

我正在嘗試跟蹤全局鍵事件,特別是正在按下的箭頭鍵。對於這一點,我附加處理程序到當前活動場景:如果節點有焦點,某些關鍵事件不會到達場景

scene.setOnKeyPressed(event -> 
     System.out.println("KEY PRESSED: " + event.getCode()) 
) 

然而,雖然總是被檢測封樣,ctrl和標籤最鍵,空格鍵和方向鍵只有在沒有元素具有焦點工作。就是說,就像我在窗口中的任何地方點擊一樣,某些元素會獲得焦點,按下空間或箭頭不會再觸發事件。通過CSS樣式,我發現一旦場景被點擊,總是存在一個焦點元素,並且在這種情況下上面的鍵停止工作。

我的猜測是,重點節點聽重點事件,並拒絕如果它是空間或箭頭泡沫。我的問題是:

  1. 爲什麼這些鍵被捕獲?我沒有看到任何UI組件都需要處理箭頭鍵和空格鍵事件。
  2. 我可以防止節點竊取關鍵事件,即讓它們始終冒泡嗎?如果沒有,是否有另一種檢測按鍵的方法?
+1

您可以將事件過濾器添加到場景中,然後在滾動窗格消耗它們之前捕獲按鍵事件。 –

回答

1

事實證明,事件並不是由單獨關注的節點捕獲的,而是包含所有這些事件的ScrollPane。它捕獲那些按鍵以在必要時滾動視口,並且如果不能滾動則仍然不會冒泡。

正如在this answer中所解釋的那樣,可以通過使用ScrollPane#addEventFilter來改變這種行爲,但應該注意不要以負面方式影響可用性。

從這個意義上講,將箭頭和空格保留爲其默認行爲(滾動)並切換到不同的鍵可能會更好。

相關問題