0

当我最小化我的舞台时,JavaFX 不会触发我的 KeyPressed 事件。最小化舞台时如何收听 KeyEvent?

这里我称之为我的舞台:

public void start(Stage primaryStage) throws IOException {
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Gui.fxml"));
    Parent root = fxmlLoader.load();
    primaryStage.setTitle("KillSwitch");
    primaryStage.setScene(new Scene(root));
    primaryStage.getScene().getRoot().requestFocus();
    primaryStage.show();
}

这是事件处理程序:

public void handleKeyInput(javafx.scene.input.KeyEvent event) throws InterruptedException, SerialPortException, IOException {
    if (event.getCode() == KeyCode.UP) {
        handletriggerButton();
    }
}
4

1 回答 1

0

大多数用户界面工具包,包括 JavaFX 都将关键事件传递给当前关注的用户界面元素,并将它们向上传播,直到它们到达根节点。

如果您的窗口被最小化,它的任何元素都不会获得键盘焦点,因此没有人会收到按键事件。

因此,正如@James_D 评论的那样,您需要一个操作系统的本机挂钩来拦截系统范围的键盘事件,例如键盘记录器。

对于集成本机,您可以采用Java Native Interface方式,或者通过Java Native Access之类的库消除一些更粗糙的边缘。

关于如何在您的目标操作系统中执行此操作,您可能应该针对操作系统本身进行研究。

于 2017-05-10T07:02:45.970 回答