JavaFXで、ユーザーがステージを閉じるボタン(X)(一番上の一番上の十字)をクリックした場合にイベントを取得するにはどうすればよいですか?
アプリケーションがウィンドウを閉じたときにデバッグメッセージを出力したい。 (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)");
//}
}
私はこの質問の答えを得ました
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);
}
});
}
});
同じ効果を実現するもう1つの方法ですが、アプリケーションの起動方法との整合性は、stop()をオーバーライドすることで維持できます。
JavaFXドキュメントによると、アプリケーションのインスタンスのライフサイクルは次のとおりです。
JavaFXランタイムは、アプリケーションが起動されるたびに、次のことを順番に実行します。
- 指定されたApplicationクラスのインスタンスを構築します
- Init()メソッドを呼び出します
- Start(javafx.stage.Stage)メソッドを呼び出します
- アプリケーションが完了するのを待ちます。これは、次のいずれかが発生したときに発生します。
- アプリケーションがPlatform.exit()を呼び出す
- 最後のウィンドウが閉じられ、PlatformのimplicitExit属性がtrueである
- Stop()メソッドを呼び出します
結果として、単に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");
}
});