【发布时间】:2017-07-06 22:24:17
【问题描述】:
我有一个代码可以在按下某个键时执行某些功能:
scene.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.F1) {
doSomething();
}
});
它可以工作,但前提是没有焦点组件,如 Button 或 TextField。 我注意到如果我按下 CTRL+F1、ALT+F1 或 SHIFT+F1,它会起作用,但如果没有焦点组件,只有 F1 才起作用。 有没有办法避免这种情况?
-----更新----- 正如@James_D 所说,我可以使用 eventFilter 而不是 eventHandler:
scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode().equals(KeyCode.ESCAPE)) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(TelaPrincipalController.class.getResource("/br/com/atualy/checkout/layout/telaoperacoescaixa.fxml"));
Parent parent = fxmlLoader.load();
Scene scene = new Scene(parent, 600,400);
Stage stage = new Stage();
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.initOwner(this.stage);
stage.showAndWait();
System.out.println("----> THIS IS BEING PRINTED TWICE ! <----");
} catch (IOException e) {
e.printStackTrace();
}
}
});
此代码中的第 12 行每按一次 ESC 键就会打印两次。这意味着当我按下 esc 时,它会打开新窗口,当我关闭它时,窗口会再打开一次。 我能解决吗?
【问题讨论】:
-
不太确定为什么会这样,但您可以通过在
System.out.println(...)之后使用该事件来解决它