2016-11-13 9 views
0

javaFYプロジェクトでは、キーを押したリスナーをウィンドウ全体に追加します。ウィンドウのFXMLファイルのルートノードは、次のとおりです。キープレスイベントが発生しない

<VBox onKeyPressed="#windowKeyPressed" fx:controller="hu.kleni.tetris.EventController" ...> 

と敬遠しがちイベントハンドラクラス:main()方法で

public class EventController { 
    @FXML 
    public void windowKeyPressed(KeyEvent event) { 
     System.out.println(event.getCode()); 
    } 
    ... 
} 

、それだけでウィンドウをロードして起動します。プログラムを起動するとウィンドウが表示されますが、キーを押すとコンソールには何も表示されません。私は何か見落としてますか?

編集:私はこれを使用することができます(そしてそれが正常に動作します)が:

scene.setOnKeyPressed((event) -> { 
    // maybe call EventController.windowKeyPressed(event); 
}) 

、私は唯一のFXMLファイル内のすべてのイベントハンドラを定義することを好むだろう。

答えて

1

onKeyPressedが機能するには、rootVBox)が必要です。あなたのrootStageが示された後、例えば:

@Override 
public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));   
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    root.requestFocus(); // add this, root is the VBox in your case 
} 
上ご Applicationクラスで

requestFocus()

関連する問題