2013-05-30 8 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()); 
      } 
     } 
    }); 

WHY U NO WORKING、キーイベント?私はここで何か間違っていますか?
必ず、マウスイベントは同じコードで正常に動作します。

+1

シーンにリスナーを追加するでしょうか? –

+0

ありがとう、それは動作します。 – Chechulin

答えて

11

1つの解決策は、イベントリスナーをシーンに追加することです。レイアウトにはデフォルトでフォーカスがないため、KeyEventsに応答しません。 KeyEventsはまずフォーカスされたノードに渡されます。

別の解決策は、あなたのペインのフォーカス可能にすることです:

root.setFocusTraversable(true) 
+0

1つのノードを内部に持つSplitPaneを追加しました。その後、うまくいった。 setFocusTraversable(true)...違いがわからない場合でも、BorderPaneで動作しません。 –

0

はまた、あなたが

輸入javafx.scene.input.KeyEventのように正しいのKeyEventをインポートしていることを確認してください。 AWT

1

((KeyEvent)t).getCharacter()から

ではなく、KeyEventの代わりに((KeyEvent)e).getText()

関連する問題