JavaFX: stage.setOnCloseRequest () не работает - PullRequest
0 голосов
/ 29 мая 2020

У меня есть главное окно, поверх которого открывается диалоговое окно с сообщением об ошибке. В этот момент отображается оверлей между главным окном и диалоговым окном ошибки (часть стадии главного окна). mainWindowOverlay.setManaged(true) При закрытии диалогового окна ошибки наложение должно исчезнуть. errorStage.setOnCloseRequest(we -> overlayOff()) Я не знаю, не зарегистрировано ли событие закрытия или возникла другая проблема, но наложение остается после закрытия диалогового окна с ошибкой.

Есть идеи?

controllerMainWindow. java

package packageA;
import [...];

public class controllerMainWindow extends AbstractController
{
    @FXML
    private AnchorPane mainWindowOverlay;
    @FXML
    private Button btnError;
    //---------------------------------------------------------------------------------------------------
    public void initialize()
    {
        mainWindowOverlay.setManaged(false);
    }
    //---------------------------------------------------------------------------------------------------
    @FXML
    public void handleButtonAction(ActionEvent event)
    {
            try {
                if (event.getSource().equals(btnError)) {
                    FXMLLoader errorLoader = new FXMLLoader();
                    errorLoader.setLocation(getClass().getResource("errorDialog.fxml"));
                    controllerErrorDialog errorController = new controllerErrorDialog();
                    errorLoader.setController(errorController);
                    Parent layout;
                    layout = errorLoader.load();
                    Scene errorScene = new Scene(layout);
                    Stage errorStage = new Stage();
                    errorStage.initStyle(StageStyle.UNDECORATED);
                    errorController.setStage(errorStage);
                    if(this.main!=null) {
                        errorStage.initOwner(main.getPrimaryStage());
                    }
                    customerServiceOverlay.setManaged(true);
                    errorStage.initModality(Modality.APPLICATION_MODAL);
                    errorStage.setScene(errorScene);
                    errorStage.setX(750);
                    errorStage.setY(425);
                    errorStage.setOnCloseRequest(we -> overlayOff());
                    errorStage.showAndWait();
                }
            } catch (IOException exceptionHandleButtonAction) {
                System.out.println("Error on handleButtonAction.");
                exceptionHandleButtonAction.printStackTrace();
                return;
            }
    }
    //---------------------------------------------------------------------------------------------------
    public void overlayOff()
    {
        customerServiceOverlay.setManaged(false);
    }
    //---------------------------------------------------------------------------------------------------
}

controllerErrorDialog. java

package packageA;
import [...];

public class controllerErrorDialog extends AbstractController implements Initializable {
    @FXML
    private Button btnClose;
    @FXML
    private Stage stage = null;
    //---------------------------------------------------------------------------------------------------
    @Override
    public void initialize(URL url, ResourceBundle rb)
    {

    }
    //---------------------------------------------------------------------------------------------------
    public void setStage(Stage stage)
    {
        this.stage = stage;
    }
    //---------------------------------------------------------------------------------------------------
    @FXML
    public void handleButtonAction(ActionEvent event)
    {
        stage.fireEvent(new javafx.stage.WindowEvent(stage, 
        javafx.stage.WindowEvent.WINDOW_CLOSE_REQUEST));
        stage.close();
    }
    //---------------------------------------------------------------------------------------------------
}

1 Ответ

0 голосов
/ 02 июня 2020

Решение предоставлено @James_D и @ anko.

enter image description here

...