簡體   English   中英

如何在JavaFX應用程序中的任何位置檢測SPACE KeyEvent?

[英]How can I detect the SPACE KeyEvent anywhere in my JavaFX app?

我想檢測一個KeyEvent無論我的JavaFX應用程序中哪個元素有焦點 - 特別是,我想檢測SPACE鍵。 我試圖在與我的窗口對應的Scene中添加一個監聽器:

scene.setOnKeyPressed(ev -> {
    if (ev.getCode() == KeyCode.SPACE) {
        System.out.println("GOOD");
    }
});

但是如果我有一個具有焦點的特定節點(如ListViewButton ),則不會被檢測到。

無論用戶在我的應用程序中執行什么操作,如何檢測何時按下SPACE鍵? 我不打算中斷接收KeyEvent任何節點 - 我只是想知道它是否發生。 一個(丑陋的)解決方案是將偵聽器添加到我的所有節點,但如果可能的話我寧願不這樣做。

您可以通過向根節點添加事件過濾器來檢測KeyEvent

以下是使用您提到的一些控件的快速示例:

@Override
    public void start(Stage primaryStage) throws Exception{
        TextField textfield = new TextField();
        ListView listView = new ListView();
        listView.getItems().add("One");
        listView.getItems().add("Two");
        listView.getItems().add("Three");
        Button button = new Button("Button");

        VBox root = new VBox(5, textfield, listView, button);
        root.addEventFilter(KeyEvent.KEY_PRESSED, event->{
            if (event.getCode() == KeyCode.SPACE) {
                System.out.println("GOOD");
            }
        });
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(10));
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }

注意:在生成彈出/覆蓋的控件上,可能在顯示時未檢測到空格,但在隱藏但仍處於焦點時將檢測到該空間。 如果向上面的示例添加ComboBox或ColorPicker,則可以看到此行為

這是你的代碼

        scene.setOnKeyReleased(event ->{
        if(event.getCode()== KeyCode.SPACE)
        {
            System.out.println("goog luck");
        }

        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM