如何在JavaFX中获取舞台的关闭事件?

时间:2014-03-22 10:15:55

标签: java javafx javafx-2 stage

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

3 个答案:

答案 0 :(得分:15)

我得到了这个问题的答案

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 :(得分:9)

实现相同效果的另一种方法,但与启动应用程序的方式更加一致的是覆盖stop();

根据JavaFX文档,Application实例的生命周期如下:

  

无论何时启动应用程序,JavaFX运行时都会按顺序执行以下操作:

     
      
  1. 构造指定Application类的实例
  2.   
  3. 调用init()方法
  4.   
  5. 调用start(javafx.stage.Stage)方法
  6.   
  7. 等待应用程序完成,当发生以下任一情况时会发生:      
        
    • 应用程序调用Platform.exit()
    •   
    • 最后一个窗口已关闭且Platform上的implicitExit属性为true
    •   
  8.   
  9. 调用stop()方法
  10.   

因此,您只需覆盖stop()

@Override
public void stop(){
    System.out.println("Stage is closing");
}

答案 2 :(得分:6)

month