调用sizeToScene方法后,JavaFX舞台的宽度/高度如何?

3
我正在编写一个应用程序,希望将最小场景大小设置为800x600像素。首先我尝试使用stage.setMinWidthstage.setMinHeight,但这些值适用于整个窗口而不仅仅是场景,因此只显示了7xx x 5xx的场景。所以我在Stage javadoc中搜索到了 sizeToScene,它正是我所需要的,调用后舞台的大小大于800x600,场景完全展示了其800x600像素。

现在唯一的问题是,这个方法调用并没有在舞台本身中保存舞台的宽度和高度,因此我无法将最小宽度和高度设置为sizeToScene计算出的当前宽度和高度。

stage.getWidthstage.getHeight始终返回NaN。

我现在可以硬编码这些值(截图并在paint.net中检查),但这不适用于其他操作系统/ Windows版本/装饰程序。

我使用的是Windows 7,JavaFX 2.2,JDK 7_21。

有人有想法如何在方法调用后获取宽度和高度吗?否则请告诉我您的问题所在。如果您需要代码,我可以提供给您,但我猜您不需要。

感谢您的帮助!
1个回答

7
舞台的宽度和高度值是在舞台显示后计算出来的。您可以在舞台显示后设置这些值的最小值:
@Override
public void start(Stage primaryStage) {
    StackPane root = new StackPane();
    Scene scene = new Scene(root, 800, 600);
    primaryStage.setScene(scene);

    System.out.println("before sceneW " + scene.getWidth());
    System.out.println("before sceneH " +  scene.getHeight());
    System.out.println("before stageW " + primaryStage.getWidth());
    System.out.println("before stageH " + primaryStage.getHeight());

    primaryStage.show();

    System.out.println("after sceneW " + scene.getWidth());
    System.out.println("after sceneH " +  scene.getHeight());
    System.out.println("after stageW " + primaryStage.getWidth());
    System.out.println("after stageH " + primaryStage.getHeight());

    primaryStage.setMinWidth(primaryStage.getWidth());
    primaryStage.setMinHeight(primaryStage.getHeight());
}

sizeToScene()类似于Swing的(AWT)pack()。我认为在这里不需要使用它。


1
非常感谢,我刚刚没想到在 stage.show() 之后检查宽度和高度...这太简单了。 - Morv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接