我一直试图在构造函数之外设置场景的宽度和高度,但一直无济于事。在查看了Scene
API后,我看到了一个方法,可以让你分别获得高度和宽度,但不能设置方法..:s(设计缺陷可能)。
经过进一步研究后,我遇到了SceneBuilder
并找到了可以修改高度和宽度的方法。但是,我不知道如何将它应用于已创建的场景对象或如何创建可用于代替场景对象的SceneBuilder
对象。
答案 0 :(得分:9)
创建Scene
并将其分配到Stage
后,您可以使用Stage.setWidth
和Stage.setHeight
同时更改舞台和场景尺寸。
SceneBuilder
无法应用于已创建的对象,只能用于场景创建。
答案 1 :(得分:2)
我只想为可能遇到类似问题的人发布另一个答案。
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
。
答案 2 :(得分:0)
似乎无法在创建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);
}