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)");
//}
}
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);
}
});
}
});
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:
- Construit une instance de la classe Application spécifiée
- Appelle la méthode init ()
- Appelle la méthode start (javafx.stage.Stage)
- 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
- Appelle la méthode stop ()
En conséquence, vous remplacez simplement stop ()
@Override
public void stop(){
System.out.println("Stage is closing");
}
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
System.out.println("Stage is closing");
}
});