2013-05-30 84 views
8

我希望我的JavaFX程序響應鍵盤事件。
我嘗試將聽衆添加到根Pane,最上面的Pane,但它不響應事件!
這裏是我的代碼:無法在JavaFX中偵聽KeyEvent

AnchorPane root = new AnchorPane(); 
    root.setOnKeyPressed(new EventHandler<KeyEvent>() { 

     @Override 
     public void handle(KeyEvent t) { 
      pressKey(t.getCharacter().charAt(0)); 
     } 
    }); 
    root.setOnKeyReleased(new EventHandler<KeyEvent>() { 

     @Override 
     public void handle(KeyEvent t) { 
      releaseKey(t.getCharacter().charAt(0)); 
     } 
    }); 
    root.addEventHandler(EventType.ROOT, new EventHandler<Event>() { 

     @Override 
     public void handle(Event t) { 
      if (t.getClass().equals(KeyEvent.class)) { 
       System.out.println("AAARGH! " + ((KeyEvent)t).getCharacter()); 
      } 
     } 
    }); 

爲什麼ü沒有一個工作,關鍵事件?我在這裏做錯了什麼?
可以肯定的是,鼠標事件使用相同的代碼正常工作。

+1

添加監聽器的場景? –

+0

謝謝,這有效。 – Chechulin

回答

11

一種解決方案是將事件偵聽器添加到場景中。由於佈局默認沒有焦點,因此它們不會在KeyEvent上響應。 KeyEvents首先被傳遞給關注的節點。

另一種解決方案是使你的窗格可聚焦:

root.setFocusTraversable(true) 
+0

我添加了一個帶有一個節點的SplitPane。那麼工作得很好。不會與BorderPane一起工作,即使我setFocusTraversable(true)...不知道爲什麼差異。 –

0

也確保你輸入正確的KeyEvent在

進口javafx.scene.input.KeyEvent;

,而不是從AWT

該KeyEvent
1

((KeyEvent)t).getCharacter()改用((KeyEvent)e).getText()