JavaFX KeyEvent 当阶段处于非活动状态时



当我最小化我的阶段时,JavaFX不会触发我的KeyPressing事件。当舞台最小化时,如何收听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();
    }
}

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

如果窗口最小化,则其任何元素都不会具有键盘焦点,因此没有人会收到键事件。

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

对于集成本机,你可以采用Java原生接口的方式,或者通过Java原生访问等库去除一些更粗糙的边缘。

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

相关内容

  • 没有找到相关文章

最新更新