如果存在聚焦组件,则不执行场景的JavaFX按键按下事件

如果存在聚焦组件,则不执行场景的JavaFX按键按下事件,java,javafx,Java,Javafx,当按下某个键时,我有一个代码来执行某些功能: scene.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.F1) { doSomething(); } }); 它可以工作,但前提是没有焦点组件,比如按钮或文本字段。 我注意到,如果我按CTRL+F1、ALT+F1或SHIFT+F1,它会起作用,但只有F1在没有聚焦组件时才起作用。 有没有办法避免这种情况 ----更新--- 正如@James

当按下某个键时,我有一个代码来执行某些功能:

scene.setOnKeyPressed(event -> {
    if (event.getCode() == KeyCode.F1) {
        doSomething();
    }
});
它可以工作,但前提是没有焦点组件,比如按钮或文本字段。 我注意到,如果我按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();
        }
    }
});
scene.addEventFilter(按下KeyEvent.KEY,事件->{
if(event.getCode().equals(KeyCode.ESCAPE)){
试一试{
FXMLLoader FXMLLoader=新的FXMLLoader(TelaPrincipalController.class.getResource(“/br/com/atualy/checkout/layout/telaoperacescaixa.fxml”);
Parent=fxmloader.load();
场景=新场景(父,600400);
阶段=新阶段();
舞台场景;
阶段.初始模态(模态.应用\模态);
stage.initOwner(本阶段);
stage.show和wait();

System.out.println(“--->这将被打印两次!改用事件筛选器。某些控件使用按键事件,因此使用事件筛选器可以在控件使用它们之前处理它们

scene.addEventFilter(KeyEvent.KEY_PRESSED,
                event -> System.out.println("Pressed: " + event.getCode()));

如果我在代码中打开一个新的模式窗口,则事件筛选器看起来会执行两次。请使用
KeyEvent查看问题中我的更新。释放了KEY\u而不是
KeyEvent。按了KEY\u
。为什么使用此行会给我一个方法,类场景中的addEventFilter无法应用于给定类型;必需:EventType,EventHanDlern不太清楚为什么会发生这种情况,但您可以通过在
System.out.println(…)