Установите ширину и высоту сцены - PullRequest
6 голосов
/ 09 января 2012

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

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

Ответы [ 3 ]

9 голосов
/ 09 января 2012

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

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

2 голосов
/ 14 сентября 2014

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

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.

1 голос
/ 18 июля 2016

Кажется невозможным установить размер 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);
}
...