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。

有人知道如何在方法调用后获取宽度和高度吗?我希望您了解我的问题,否则请告诉我。如果你需要代码,我可以给你,但我猜你不需要它。谢谢!

4

1 回答 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()。我想你在这里不需要它。

于 2013-06-23T22:09:12.113 回答