问题
I have a controller on which an action event of my button opens a child stage. The issue is when I close the parent stage, the child stage also closes. I want to prevent parent stage from closing as long as child stage is open.

URL url = getClass().getResource("Message.fxml");
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(url);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
root = (Parent)fxmlLoader.load(url.openStream());
Stage stage = new Stage();
//stage.initStyle(StageStyle.UNDECORATED);
//stage.setFullScreen(true);
stage.setTitle("Welcome User");
stage.setScene(new Scene(root, 675,
stage.show();
回答1:
Set the followings:
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(primaryStage);
You can get the primaryStage by putting it to static variable in main class:
public static Stage primaryStage;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
...
}
then
stage.initOwner(MainApp.primaryStage);
回答2:
Just set the following property to your stage object...
stage.initModality(Modality.APPLICATION_MODAL);
来源:https://stackoverflow.com/questions/19953306/block-parent-stage-until-child-stage-closes