2017-04-18 88 views
0

我有一個GridPane(稱爲工作區),其中包含很多不同的東西,比如tableview,多個按鈕和另一個GridPane。如何監聽即使沒有焦點時按下的按鍵

我有以下代碼:

workspace.setOnKeyPressed(e -> { 
      if (e.isControlDown() && e.getCode() == (KeyCode.A)) { 
       System.out.println("B Pressed"); 
      } else if (e.isControlDown() && e.getCode() == (KeyCode.B){ 
       System.out.println("A Pressed"); 
      } 
}); 

按A如果選擇的東西只有B作品(打印輸出)。例如,如果我點擊桌面視圖,所以它的焦點或如果我點擊其中一個按鈕。如果沒有任何焦點(通過點擊按鈕或桌面視圖之外的某個地方),按A或B不會執行任何操作。

有什麼辦法解決這個問題嗎?即使沒有任何焦點,我也希望它能夠工作。

+0

在根節點上設置處理程序。 – Sedrick

回答

0

您是否嘗試過使用,但請確保在演出舞臺後放置它。例如:

Scene scene = new Scene(workspace, 300, 250); 
primaryStage.setScene(scene); 
primaryStage.show(); 
workspace.requestFocus(); 

這應該可以解決您的問題。

+0

如果你的意思workspace.requestFocus()然後是我已經試過。我沒有任何名爲root的變量/字段。 – user7795564

+0

如果工作區是組件的主要容器,那麼它應該可以工作,但是確保在顯示階段之後使用workspace.requestFocus(),否則它不會工作 – FilipRistic

0

在您的根節點上設置處理程序。

yourRootNode.setOnKeyPressed(e -> { 
      if (e.isControlDown() && e.getCode() == (KeyCode.A)) { 
       System.out.println("B Pressed"); 
      } else if (e.isControlDown() && e.getCode() == (KeyCode.B){ 
       System.out.println("A Pressed"); 
      } 
}); 
相關問題