如何在保持纵横比的同时调整javafx.scene.scene的大小?

如何在保持纵横比的同时调整javafx.scene.scene的大小?,javafx,Javafx,我正在用JavaFX2.2.7-b01编写一个应用程序 下面是我目前拥有的代码示例。如何允许调整应用程序窗口的大小,但保持最初配置的纵横比?换句话说,如果用户调整窗口大小,窗口宽度应始终保持为窗口高度的两倍 ... public void showScene(Stage stage, String fxmlPath) { try { FXMLLoader loader = new FXMLLoader(); loader.setBuilderFactory

我正在用JavaFX2.2.7-b01编写一个应用程序

下面是我目前拥有的代码示例。如何允许调整应用程序窗口的大小,但保持最初配置的纵横比?换句话说,如果用户调整窗口大小,窗口宽度应始终保持为窗口高度的两倍

  ...
  public void showScene(Stage stage, String fxmlPath) {
    try {
      FXMLLoader loader = new FXMLLoader();
      loader.setBuilderFactory(new JavaFXBuilderFactory());
      loader.setLocation(fxmlPath);
      Parent page;
      try (InputStream in = Main.class.getResourceAsStream(fxmlPath)) {
        page = (Parent) loader.load(in);
      }
      Scene scene = new Scene(page, 400, 200);
      stage.setScene(scene);
      stage.sizeToScene();
      stage.show();
    } catch (Exception ex) {
      ...
    }
  }
  ...
JavaFX似乎允许用户在构造函数中指定场景的宽度和高度,但不允许编程访问来更新宽度或高度。没有setWidth或setHeight方法。我知道我可以添加属性侦听器,以便在调整场景大小时获取场景的只读宽度/高度,但我还无法想出如何动态更改场景尺寸,以便强制保持纵横比


我想,如果我要对场景对象进行子类化,这是可能的(如果我必须这样做,我会这样做),但是还有其他简单的方法吗?

在使用Java Fx Scene Builder的netbeans中,您可以使用AnchorPane约束来设置 调整舞台的大小。

如何在保持高宽比的同时调整javafx.scene.scene的大小?

通过操纵舞台大小而不是场景:

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Play by resizing the window");
    VBox root = new VBox();
    root.getChildren().add(btn);
    root.setStyle("-fx-background-color: gray");

    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.minWidthProperty().bind(scene.heightProperty().multiply(2));
    primaryStage.minHeightProperty().bind(scene.widthProperty().divide(2));
    primaryStage.show();
}

更改值时使用RemovelListener和addListener​​防止侦听器链接


privateChangeListener我不认为你能用JavaFX2.2找到一个合适的解决方案。我建议针对记录一个功能请求。我只是想指出,此解决方案并不完美,因为如果您放大窗口,然后尝试缩小它,它不会让您一直沿着对角线进行,最后,您必须从底部和侧面对其进行摆振。此时,您将发现此示例以及其他与调整大小相关的stackoverflow代码示例通过将一个维度的最小值和最大值绑定到另一个维度,您可以避免MikaelF指出的摆振问题,例如stage.setMinHeight(580);DoubleBinding w=stage.heightProperty().减法(28).除法(2);stage.minWidthProperty().bind(w);stage.maxWidthProperty().bind(w);请注意,然后只能在一个尺寸中调整窗口的大小,而另一个尺寸将自动调整。