web-dev-qa-db-fra.com

Comment obtenir l'événement de fermeture d'une étape dans JavaFX?

Dans JavaFX, comment puis-je obtenir l'événement si un utilisateur clique sur le bouton Fermer (X) (croix en haut à droite) d'une étape?

Je veux que mon application imprime un message de débogage lorsque la fenêtre est fermée. (System.out.println("Application Close by click to Close Button(X)"))

@Override
   public void start(Stage primaryStage) {
        StackPane root = new StackPane();
       root.getChildren().add(btn);
       Scene scene = new Scene(root, 300, 250);
       primaryStage.setTitle("Hello World!");
       primaryStage.setScene(scene);
       primaryStage.show();

       // Any Event Handler
       //{
       System.out.println("Application(primaryStage) Closed by click to Close Button(X)");
       //}
   }
15
java baba

J'ai la réponse à cette question

stage.setOnHiding(new EventHandler<WindowEvent>() {

         @Override
         public void handle(WindowEvent event) {
             Platform.runLater(new Runnable() {

                 @Override
                 public void run() {
                     System.out.println("Application Closed by click to Close Button(X)");
                     System.exit(0);
                 }
             });
         }
     });
15
java baba

Une autre méthode pour obtenir le même effet, mais reste plus cohérente avec la façon dont vous démarrez votre application, est de remplacer stop ();

Selon la documentation JavaFX, le cycle de vie d'une instance d'une application est le suivant:

Le runtime JavaFX effectue les opérations suivantes, dans l'ordre, chaque fois qu'une application est lancée:

  1. Construit une instance de la classe Application spécifiée
  2. Appelle la méthode init ()
  3. Appelle la méthode start (javafx.stage.Stage)
  4. Attend la fin de l'application, ce qui se produit lorsque l'un des événements suivants se produit:
    • l'application appelle Platform.exit ()
    • la dernière fenêtre a été fermée et l'attribut implicitExit sur la plateforme est vrai
  5. Appelle la méthode stop ()

En conséquence, vous remplacez simplement stop ()

@Override
public void stop(){
    System.out.println("Stage is closing");
}
10
wayway
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
      public void handle(WindowEvent we) {
          System.out.println("Stage is closing");
      }
  }); 
6
Sijo Jose