Установить ширину и высоту сцены

Я пытался установить ширину и высоту сцены вне конструктора, и это было безрезультатно. Просматривая Scene API, я увидел метод, который позволяет вам получить высоту и ширину соответственно, но не один, чтобы установить метод..: s (возможно, недостаток дизайна).

После дальнейших исследований я наткнулся на SceneBuilder и нашел методы, которые могут изменять высоту и ширину. Однако я не знаю, как применить его к уже созданному объекту сцены или как создать объект SceneBuilder, который можно было бы использовать вместо объекта сцены.


person Chika    schedule 09.01.2012    source источник


Ответы (3)


После того, как вы создали Scene и назначили его Stage, вы можете использовать Stage.setWidth и Stage.setHeight для одновременного изменения размеров сцены и сцены.

SceneBuilder нельзя применить к уже созданному объекту, его можно использовать только для создания сцены.

person Sergey Grinev    schedule 09.01.2012
comment
Обратите внимание, что этот ответ не совпадает с установкой ширины или высоты Scene, потому что Stage.setWidth() и Stage.setHeight включают оформление окна. Смотрите ответ @ user2229691 ниже, если это важно для вас. - person MarcusOtter; 05.03.2021

Кажется, невозможно установить размер Scene после его создания.

Установка размера Stage означает установку размера окна, включающего в себя размер украшения. Таким образом, Scene меньше по размеру, если только Stage не украшен.

Мое решение состоит в том, чтобы вычислить размер украшения при инициализации и добавить его к размеру Stage при изменении размера:

private Stage stage;
private double decorationWidth;
private double decorationHeight;

public void start(Stage stage) throws Exception {
    this.stage = stage;

    final double initialSceneWidth = 720;
    final double initialSceneHeight = 640;
    final Parent root = createRoot();
    final Scene scene = new Scene(root, initialSceneWidth, initialSceneHeight);

    this.stage.setScene(scene);
    this.stage.show();

    this.decorationWidth = initialSceneWidth - scene.getWidth();
    this.decorationHeight = initialSceneHeight - scene.getHeight();
}

public void resizeScene(double width, double height) {
    this.stage.setWidth(width + this.decorationWidth);
    this.stage.setHeight(height + this.decorationHeight);
}
person user2229691    schedule 18.07.2016
comment
Я думаю, что API немного изменился с момента написания этого ответа. Scene.getX() теперь всегда равно initialSceneX, поэтому этот ответ всегда будет давать размер украшения 0. Чтобы заставить это работать, мне пришлось изменить расчет украшения на stage.getWidth() - initialWidth и stage.getHeight() - initialHeight. Но после этого он работал без нареканий! Это именно то умное решение, которое я искал, спасибо! - person MarcusOtter; 05.03.2021

Я просто хотел опубликовать еще один ответ для тех, у кого могла быть такая же проблема, как у меня.

http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html

setWidth() или setHeight() нет, а свойство ReadOnly, но если вы посмотрите на

Constructors

Scene(Parent root)
Creates a Scene for a specific root Node.

Scene(Parent root, double width, double height)
Creates a Scene for a specific root Node with a specific size.

Scene(Parent root, double width, double height, boolean depthBuffer)
Constructs a scene consisting of a root, with a dimension of width and height, and specifies whether a depth buffer is created for this scene.

Scene(Parent root, double width, double height, boolean depthBuffer, SceneAntialiasing antiAliasing)
Constructs a scene consisting of a root, with a dimension of width and height, specifies whether a depth buffer is created for this scene and specifies whether scene anti-aliasing is requested.

Scene(Parent root, double width, double height, Paint fill)
Creates a Scene for a specific root Node with a specific size and fill.

Scene(Parent root, Paint fill)
Creates a Scene for a specific root Node with a fill.

Как видите, здесь вы можете установить высоту и ширину, если вам нужно.

Что касается меня, я использую SceneBuilder, как вы описали, и мне нужны были ширина и высота этого. Я создаю пользовательские элементы управления, поэтому было странно, что он не делал этого автоматически, так что вот как это сделать, если вам нужно.

Я мог бы также использовать setWidth() / setHeight() из Stage.

person XaolingBao    schedule 13.09.2014