Center stage on parent stage

前端 未结 2 1871

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

相关标签:
2条回答
  • 2020-12-03 14:30

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-03 14:48

    When you don't determine a size for the childStage, you have to listen for width and height changes as width and height is still NaN when onShown is called.

    final double midX = (parentStage.getX() + parentStage.getWidth()) / 2;
    final double midY = (parentStage.getY() + parentStage.getHeight()) / 2;
    
    xResized = false;
    yResized = false;
    
    newStage.widthProperty().addListener((observable, oldValue, newValue) -> {
        if (!xResized && newValue.intValue() > 1) {
            newStage.setX(midX - newValue.intValue() / 2);
            xResized = true;
        }
    });
    
    newStage.heightProperty().addListener((observable, oldValue, newValue) -> {
        if (!yResized && newValue.intValue() > 1) {
            newStage.setY(midY - newValue.intValue() / 2);
            yResized = true;
        }
    });
    
    newStage.show();
    
    0 讨论(0)
提交回复
热议问题