【问题标题】:Key press event isn't fired按键事件未触发
【发布时间】:2016-11-13 21:49:07
【问题描述】:

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

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

和hte事件处理类:

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

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

编辑:虽然我可以使用它(而且效果很好):

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

,我宁愿只在 FXML 文件中定义所有事件处理程序。

【问题讨论】:

    标签: java events javafx keypress


    【解决方案1】:

    您需要root (VBox) 才能专注于onKeyPressed 的工作。

    在您的Application 类中,root 上的requestFocus() 在显示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
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多