簡體   English   中英

如何在JavaFX中獲取舞台的關閉事件?

[英]How do I get the close event of a stage in JavaFX?

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

另一種實現相同效果的方法,但與啟動應用程序的方式更加一致的是覆蓋stop();

根據JavaFX文檔,Application實例的生命周期如下:

無論何時啟動應用程序,JavaFX運行時都會按順序執行以下操作:

  1. 構造指定Application類的實例
  2. 調用init()方法
  3. 調用start(javafx.stage.Stage)方法
  4. 等待應用程序完成,當發生以下任一情況時會發生:
    • 應用程序調用Platform.exit()
    • 最后一個窗口已關閉,Platform上的implicitExit屬性為true
  5. 調用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");
      }
  }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM