当我最小化我的阶段时,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原生访问等库去除一些更粗糙的边缘。
关于如何在目标操作系统中执行此操作,您可能应该针对操作系统本身进行研究。