Search code examples
javajavafx-2javafxstage

Center stage on parent stage


I am creating an application in JavaFx, In which I want to do that if any child stage is getting opened then it should be opened in center of parent stage. I am trying to do this using mystage.centerOnScreen() but it'll assign the child stage to center of screen, not the center of parent stage. How can I assign the child stage to center of parent stage?

private void show(Stage parentStage) {
    mystage.initOwner(parentStage);
    mystage.initModality(Modality.WINDOW_MODAL);
    mystage.centerOnScreen();
    mystage.initStyle(StageStyle.UTILITY);
    mystage.show();
 }

Solution

  • You can use the parent stage's X/Y/width/height properties to do that. Rather than using Stage#centerOnScreen, you could do the following:

    public class CenterStage extends Application {
        @Override
        public void start(final Stage stage) throws Exception {
            stage.setX(300);
            stage.setWidth(800);
            stage.setHeight(400);
            stage.show();
    
            final Stage childStage = new Stage();
            childStage.setWidth(200);
            childStage.setHeight(200);
            childStage.setX(stage.getX() + stage.getWidth() / 2 - childStage.getWidth() / 2);
            childStage.setY(stage.getY() + stage.getHeight() / 2 - childStage.getHeight() / 2);
            childStage.show();
        }
    
        public static void main(String[] args) {
            Application.launch(args);
        }
    }