JavaFX:当相应的阶段关闭时,在控制器上调用函数

时间:2016-11-07 09:14:15

标签: javafx

当包含连接到控制器的视图的舞台关闭时,是否有办法触发控制器中的功能?假设我想在窗口关闭时在我的舞台上的每个控制器上调用“清理”功能(例如保存更改)。

2 个答案:

答案 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