JavaFX如何关闭stage以与';x';窗口中的按钮
我有一个控制器,可以打开一个新的阶段作为弹出窗口:JavaFX如何关闭stage以与';x';窗口中的按钮,javafx,Javafx,我有一个控制器,可以打开一个新的阶段作为弹出窗口: @FXML private void onClickPayments(ActionEvent event) throws IOException{ FXMLLoader loader = new FXMLLoader(getClass().getResource("ClientPayments.fxml")); Parent root = (Parent) loader.load(); ClientPaymentsCon
@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);
}
当通过“x”按钮关闭另一个阶段时,将执行“stage.setOnCloseRequest”。但在那个阶段,我有一个按钮要关闭:
@FXML
private void onClickExit(ActionEvent event){
((Stage) ((Node) event.getSource()).getScene().getWindow()).close();
}
它关闭,但没有执行方法“stage.setOnCloseRequest”
此方法是否错误,或者是否有一种关闭弹出窗口的方式与窗口中的“x”按钮完全相同?当有关闭窗口的外部请求时(即不是您的代码中的请求),将执行
setOnCloseRequest
处理程序。看
如果在窗口关闭后立即执行该逻辑就足够了,只需使用常规的onHidden
处理程序即可:
stage.setOnHidden((WindowEvent we) -> {
clientBLL.retrieve(clientID);
updateWarning();
});
如果您确实需要使用onCloseRequest
处理程序(例如,因为您可能想要否决关闭),只需将关闭逻辑移动到一个方法,并从两种类型的请求中调用它即可关闭窗口
public void doClose() {
clientBLL.retrieve(clientID);
updateWarning();
}
@FXML
private void onClickExit(ActionEvent event){
doClose();
((Node) event.getSource()).getScene().getWindow().hide();
}
及
stage.setOnCloseRequest((WindowEvent we) -> {
controller.doClose();
});