当包含连接到控制器的视图的舞台关闭时,是否有办法触发控制器中的功能?假设我想在窗口关闭时在我的舞台上的每个控制器上调用“清理”功能(例如保存更改)。
答案 0 :(得分:1)
通常,您将FXML文件的内容放入FXML和控制器外部的舞台(通过场景)。因此,您应该在实际可以访问舞台的位置添加代码来执行此操作。您可以在控制器类中定义一个方法,以便在需要执行“清理”时调用:
public class Controller {
// injected fields, etc...
public void initialize() {
// initialization code...
}
// event handlers, etc...
public void shutdown() {
// cleanup code here...
}
}
现在,当您加载FXML并在窗口中显示其内容时,您可以使用调用控制器关闭方法的阶段注册处理程序:
Stage stage = ... ;
FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/fxml/file"));
Parent root = loader.load();
Scene scene = new Scene(root);
stage.setScene(scene);
// cleanup controller resources when window closes:
Controller controller = loader.getController();
stage.setOnHidden(e -> controller.shutdown());
stage.show();
答案 1 :(得分:0)
您可以使用Window.setOnHidden