javafx键盘事件快捷键

时间:2014-08-20 06:05:12

标签: javafx keycode

我想在javafx中添加键盘快捷键。

我有场景,想要实现键盘快捷键

我的代码如下

getApplication().getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {

        public void handle(KeyEvent ke) {
            if (ke.getCode() == KeyCode.ESCAPE) {
                System.out.println("Key Pressed: " + ke.getCode());
            }
        }
    });

3 个答案:

答案 0 :(得分:16)

事件从场景传播到聚焦节点(事件捕获),然后返回场景(事件冒泡)。在事件捕获期间触发事件过滤器,而在事件冒泡期间触发onKeyPressed和事件处理程序。某些控件(例如TextField)会消耗该事件,因此它永远不会返回到场景,即取消事件冒泡并且场景的onKeyPressed不起作用。

要获取所有按键事件,请使用 addEventFilter 方法:

scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    public void handle(KeyEvent ke) {
        if (ke.getCode() == KeyCode.ESCAPE) {
            System.out.println("Key Pressed: " + ke.getCode());
            ke.consume(); // <-- stops passing the event to next node
        }
    }
});

如果您想捕获组合键,请使用 KeyCodeCombination 类:

scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    final KeyCombination keyComb = new KeyCodeCombination(KeyCode.ESCAPE,
                                                          KeyCombination.CONTROL_DOWN);
    public void handle(KeyEvent ke) {
        if (keyComb.match(ke)) {
            System.out.println("Key Pressed: " + keyComb);
            ke.consume(); // <-- stops passing the event to next node
        }
    }
});

还可以通过设置加速器为菜单添加快捷方式(参见[2])。

参考

答案 1 :(得分:1)

我不确定您使用getApplication做了什么,但只是为了表明KeyEventHandler上的Scene有效,这里有一个演示版。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MyApp extends Application {
    public void start(Stage stage) {

        VBox root = new VBox();
        root.setAlignment(Pos.CENTER);
        Label heading = new Label("Press Key");
        Label keyPressed = new Label();
        root.getChildren().addAll(heading, keyPressed);
        Scene scene = new Scene(root, 400, 300);

        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent ke) {
                keyPressed.setText("Key Pressed: " + ke.getCode());
            }
        });

        stage.setTitle("My JavaFX Application");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

答案 2 :(得分:0)

我刚刚开始学习javaFX,所以希望能帮助像我这样的人:)

这里是如何退出应用程序的按键组合示例。您可以执行所需的任何操作。

首先,初始化一个控制器(可以是按钮或菜单项)

MenuItem quit = new MenuItem("Quit");

2,设置事件处理程序

quit.setOnAction(new EventHandler() {
   @Override public void handle(ActionEvent e) {
     //  quit/close app
     primaryStage.close();
   }
});

然后设置Accelerator来执行操作

quit.setAccelerator(new KeyCodeCombination(KeyCode.E, KeyCombination.CONTROL_DOWN));

这是详细的教程

https://blog.idrsolutions.com/2014/04/tutorial-how-to-setup-key-combinations-in-javafx/

希望有帮助:)