我有一个控制器,它将弹出一个新的阶段:
@FXML
private void onClickPayments(ActionEvent event) throws IOException{
FXMLLoader loader = new FXMLLoader(getClass().getResource("ClientPayments.fxml"));
Parent root = (Parent) loader.load();
ClientPaymentsController controller = (ClientPaymentsController) loader.getController();
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.setResizable(false);
stage.setOnCloseRequest((WindowEvent we) -> {
clientBLL.retrieve(clientID);
updateWarning();
});
stage.show();
controller.setClientID(clientID);
}
Run Code Online (Sandbox Code Playgroud)
当通过“ x”按钮关闭另一个阶段时,将执行“ stage.setOnCloseRequest”。但是在那个阶段,我有一个按钮可以关闭:
@FXML
private void onClickExit(ActionEvent event){
((Stage) ((Node) event.getSource()).getScene().getWindow()).close();
}
Run Code Online (Sandbox Code Playgroud)
它关闭,但未执行方法“ stage.setOnCloseRequest”。
此方法是否错误,或者是否有一种方法可以完全类似于窗口中的“ x”按钮来关闭弹出窗口?
setOnCloseRequest
当有外部请求关闭窗口时(即代码中没有一个),将执行该处理程序。请参阅文档。
如果足以在关闭窗口后立即执行该逻辑,则只需使用常规onHidden
处理程序即可:
stage.setOnHidden((WindowEvent we) -> {
clientBLL.retrieve(clientID);
updateWarning();
});
Run Code Online (Sandbox Code Playgroud)
如果确实需要使用onCloseRequest
处理程序(例如,因为可能要否决关闭),则只需将关闭逻辑移至某个方法,然后从两种类型的请求中调用它即可关闭窗口。
public void doClose() {
clientBLL.retrieve(clientID);
updateWarning();
}
@FXML
private void onClickExit(ActionEvent event){
doClose();
((Node) event.getSource()).getScene().getWindow().hide();
}
Run Code Online (Sandbox Code Playgroud)
和
stage.setOnCloseRequest((WindowEvent we) -> {
controller.doClose();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
612 次 |
最近记录: |