我有一个代码,当按下某个键时执行某些功能:
scene.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.F1) {
doSomething();
}
});
Run Code Online (Sandbox Code Playgroud)
它可以工作,但只有在没有聚焦组件的情况下,例如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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
每次按ESC键时,此代码中的第12行打印两次.这意味着当我按下esc时,它会打开新窗口,当我关闭它时,窗口会再次打开.我可以解决吗?
Jam*_*s_D 16
请改用事件过滤器.某些控件会消耗按键事件,因此使用事件过滤器可以在控件使用之前处理它们.
scene.addEventFilter(KeyEvent.KEY_PRESSED,
event -> System.out.println("Pressed: " + event.getCode()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10716 次 |
| 最近记录: |