JavaFX:阶段关闭处理程序
我想在关闭JavaFX应用程序之前保存文件。
这就是我在中设置处理程序的方式Main::start
:
primaryStage.setOnCloseRequest(event -> { System.out.println("Stage is closing");
// Save file
});
Stage::close
当按下按钮时,控制器将调用:
@FXMLpublic void exitApplication(ActionEvent event) {
((Stage)rootPane.getScene().getWindow()).close();
}
如果关闭窗口,请单击窗口边框上的红色X(正常方式),然后会收到输出消息“ Stage is closing
”,这是所需的行为。
但是,在调用Controller::exitApplication
应用程序时,它会在不调用处理程序的情况下关闭(没有输出)。
如何使控制器使用添加到的处理程序primaryStage
?
回答:
如果你看一下在生命周期中的Application
类:
每当启动应用程序时,JavaFX运行时就会依次执行以下操作:
- 构造指定的Application类的实例
- 调用
init()
方法- 调用
start(javafx.stage.Stage)
方法- 等待应用程序完成,这在发生以下任一情况时发生:
- 应用程序调用
Platform.exit()
- 最后一个窗口已关闭,并且
implicitExit
on属性Platform
为true
- 调用
stop()
方法
这意味着您可以调用Platform.exit()
控制器:
@FXMLpublic void exitApplication(ActionEvent event) {
Platform.exit();
}
只要您覆盖stop()
主类上的方法以保存文件。
@Overridepublic void stop(){
System.out.println("Stage is closing");
// Save file
}
如您所见,通过使用,stop()
您不再需要侦听关闭请求来保存文件(尽管如果要防止窗口关闭,也可以这样做)。
以上是 JavaFX:阶段关闭处理程序 的全部内容, 来源链接: utcz.com/qa/400008.html