JavaFx close window on pressing esc?

后端 未结 4 809
故里飘歌
故里飘歌 2021-01-12 18:59

Im calling a new stage in my program which I like to close on pressing escape. I did this which gives me a NullPointerException:

    scene.setOnKeyPressed(ne         


        
相关标签:
4条回答
  • 2021-01-12 19:19

    Add the event handler to the stage/window you want to close on ESC.

    JavaFX 8 style:

        stage.addEventHandler(KeyEvent.KEY_RELEASED, (KeyEvent event) -> {
            if (KeyCode.ESCAPE == event.getCode()) {
                stage.close();
            }
        });
    
    0 讨论(0)
  • 2021-01-12 19:27

    try this..

      scene.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>
      () {
    
            @Override
            public void handle(KeyEvent t) {
              if(t.getCode()==KeyCode.ESCAPE)
              {
                  System.out.println("click on escape");
               Stage sb = (Stage)label.getScene().getWindow();//use any one object
               sb.close();
              }
            }
        });
    
    0 讨论(0)
  • 2021-01-12 19:32

    why you dont show us more of your code? However, try this:

    public class Login extends Application {
    
        public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(final Stage primaryStage) {
        primaryStage.setTitle("JavaFX Welcome");
        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));
    
        Text scenetitle = new Text("Welcome");
        scenetitle.setId("welcome-text");
        grid.add(scenetitle, 0, 0, 2, 1);
    
        Label userName = new Label("User Name:");
        grid.add(userName, 0, 1);
    
        TextField userTextField = new TextField();
        grid.add(userTextField, 1, 1);
    
        Label pw = new Label("Password:");
        grid.add(pw, 0, 2);
    
        PasswordField pwBox = new PasswordField();
        grid.add(pwBox, 1, 2);
    
        Button btn = new Button("Sign in");
        HBox hbBtn = new HBox(10);
        hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
        hbBtn.getChildren().add(btn);
        grid.add(hbBtn, 1, 4);
    
        Scene scene = new Scene(grid, 660, 300);
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent ke) {
                if (ke.getCode() == KeyCode.ESCAPE) {
                    System.out.println("Key Pressed: " + ke.getCode());
                    primaryStage.close();
                }
            }
        });
        //primaryStage.setFullScreen(true);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    }
    

    Done.

    0 讨论(0)
  • 2021-01-12 19:34

    Hope the imported Eventhandler package is not of JavaFX.

    Try using,

    import javafx.event.EventHandler;
    

    Note:As the naming convention are same but only the package name differs between swing and JavaFX, Your NetBeans/Eclipse may auto import different packages, so make sure of it.

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