关键新闻事件未被解雇

时间:2016-11-13 21:49:07

标签: java events javafx keypress

在javaFY项目中,我想在整个窗口中添加一个按键监听器。窗口的FXML文件中的根节点是:

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

并且事件处理程序类:

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

main()方法中,它只是加载并启动窗口。如果我启动程序,窗口会出现,但是在我按下一个键之后,我在控制台中看不到任何内容。我错过了什么吗?

编辑:虽然我可以使用它(并且它工作正常):

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

,我更喜欢只在FXML文件中定义所有事件处理程序。

1 个答案:

答案 0 :(得分:1)

您需要rootVBox)关注onKeyPressed才能发挥作用。

Application课程中,requestFocus()显示root后的Stage,例如:

@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
}