首页 > 解决方案 > 最大化舞台后的场景最大化javafx

问题描述

当我调整窗口、舞台以及包含场景的大小时,正确调整了大小,但是当我单击最大化按钮时,只有舞台被最大化,而不是里面的场景。更糟糕的是,没有手动更改场景高度和宽度的方法(这些是只读的)。我还尝试创建新场景并将旧场景中的根元素放入其中,但随后出现异常,即 2 个场景不能具有相同的根元素。谢谢!

最小的可重现示例:

@Override
    public void start(Stage primaryStage) { 
        Group root = new Group();
        Scene scene = new Scene(root, 200, 250); 
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();

        primaryStage.maximizedProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue) {
                System.out.println("stage width: " + primaryStage.getWidth());
                System.out.println("scene width: " + scene.getWidth());
            }
        });

        primaryStage.widthProperty().addListener((obs, oldVal, newVal) -> {
            System.out.println("stage width: " + primaryStage.getWidth());
                System.out.println("scene width: " + scene.getWidth());

        });
    }

我先稍微调整一下窗口大小,然后单击最大化。这是输出的屏幕截图: 输出

我标记了单击最大化的时刻。谢谢!

标签: javajavafx

解决方案


正如@Slaw 在评论中指出的那样,场景在舞台之后调整大小,因此听舞台尺寸变化是行不通的。我应该改为听场景变化。所以正确的代码如下:

@Override
public void start(Stage primaryStage) { 
    Group root = new Group();
    Scene scene = new Scene(root, 200, 250); 
    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();

    scene.heightProperty().addListener((observable, oldValue, newValue) -> {
        System.out.println("stage height: " + primaryStage.getHeight());
        System.out.println("scene height: " + scene.getHeight());
    });

    scene.widthProperty().addListener((obs, oldVal, newVal) -> {
        System.out.println("stage width: " + primaryStage.getWidth());
        System.out.println("scene width: " + scene.getWidth());
    });
}

非常感谢!:D


推荐阅读