在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文件中定义所有事件处理程序。
答案 0 :(得分:1)
您需要root
(VBox
)关注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
}