javafx keyboard event shortcut key

前端 未结 3 1866
故里飘歌
故里飘歌 2021-01-02 23:40

I want to add keyboard shortcut key in javafx.

i have scene and want to implement the keyboard shortcut

my code is as follows

getApplication(         


        
相关标签:
3条回答
  • 2021-01-03 00:19

    I am not sure what you are doing with getApplication, but just to show that KeyEventHandler on Scene works, here's a demo for you.

    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);
        }
    }
    
    0 讨论(0)
  • 2021-01-03 00:21

    Events travel from the scene to the focused node (event capturing) and then back to the scene (event bubbling). Event filter are triggered during event capturing, while onKeyPressed and event handler are triggered during event bubbling. Some controls (for example TextField) consume the event, so it never comes back to the scene, i.e. event bubbling is canceled and onKeyPressed for the scene doesn't work.

    To get all key pressed events use addEventFilter method:

    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
            }
        }
    });
    

    If you want to capture key combinations use the KeyCodeCombination class:

    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
            }
        }
    });
    

    There is also the possibility to add shortcuts to the menu by setting an accelerator (see [2]).

    References

    • [1] http://docs.oracle.com/javafx/2/events/processing.htm
    • [2] https://blog.idrsolutions.com/2014/04/tutorial-how-to-setup-key-combinations-in-javafx/
    0 讨论(0)
  • 2021-01-03 00:31

    I just started learning javaFX so hope that help someone like me out there :)

    Here is an example of key combination of how to exit from the app. You can perform any action you want.

    1st, init a controller (could be a button or menu item)

    MenuItem quit = new MenuItem("Quit");
    

    2nd, set event handler

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

    and then setAccelerator to perform an action

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

    here is a detail tutorial

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

    Hope that helps :)

    0 讨论(0)
提交回复
热议问题