8

我一直在尝试在构造函数之外设置场景的宽度和高度,但无济于事。在查看了SceneAPI 之后,我看到了一种方法,它可以让你分别获取高度和宽度,但不能设置方法.. :s (可能是设计缺陷)。

经过进一步研究,我SceneBuilder发现了可以修改高度和宽度的方法。但是,我不知道如何将其应用于已创建的场景对象或如何创建SceneBuilder可用于代替场景对象的对象。

4

3 回答 3

14

一旦创建Scene并分配给Stage您,您就可以同时使用Stage.setWidthStage.setHeight更改舞台和场景的大小。

SceneBuilder不能应用于已经创建的对象,它只能用于场景创建。

于 2012-01-09T16:27:48.383 回答
3

创建后似乎无法设置其大小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);
}
于 2016-07-18T13:44:04.730 回答
2

我只是想为可能遇到与我类似问题的人发布另一个答案。

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

没有setWidth()or 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()from the Stage

于 2014-09-13T23:45:04.013 回答