我有一个主窗口,上面打开一个错误对话框。这时,在主窗口和错误对话框之间会显示一个覆盖层(主窗口阶段的一部分)。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);
}
//---------------------------------------------------------------------------------------------------
}
控制器ErrorDialog.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();
}
//---------------------------------------------------------------------------------------------------
}