gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:09:02 28 4
gpt4 key购买 nike

我正在使用 JavaFX 2.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 方法。我知道我可以添加属性监听器以在调整大小时获取场景的只读宽度/高度,但我无法弄清楚如何动态更改场景尺寸,因此我可以强制纵横比为保持。

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

最佳答案

> How to make javafx.scene.Scene resize while maintaining an aspect ratio?
通过操纵舞台大小而不是场景:

@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();
}

关于javafx - 如何在保持纵横比的同时使 javafx.scene.Scene 调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532962/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com