我正在用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方法。我知道我可以添加属性侦听器,以便在调整大小时获得场景的只读宽度/高度,但我还无法弄清楚如何动态地更改场景尺寸,以便能够强制保持高宽比。
我想,如果我要子类场景对象(如果必须的话,我会这样做),这是可能的,但是还有其他简单的方法来做到这一点吗?
发布于 2013-09-05 14:04:31
> 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();
}发布于 2021-03-21 13:44:55
在更改值removeListener时使用addListener和,以防止侦听器链接。
private ChangeListener<? super Number> widthChangeListener;
private ChangeListener<? super Number> heightChangeListener;
@Override
public void start(Stage stage) throws Exception {
widthChangeListener = (observable, oldValue, newValue) -> {
stage.heightProperty().removeListener(heightChangeListener);
stage.setHeight(newValue.doubleValue() / 2.0);
stage.heightProperty().addListener(heightChangeListener);
};
heightChangeListener = (observable, oldValue, newValue) -> {
stage.widthProperty().removeListener(widthChangeListener);
stage.setWidth(newValue.doubleValue() * 2.0);
stage.widthProperty().addListener(widthChangeListener);
};
stage.widthProperty().addListener(widthChangeListener);
stage.heightProperty().addListener(heightChangeListener);
}发布于 2013-09-05 11:52:02
在netbeans中,使用Java场景生成器可以使用AnchorPane约束设置舞台的调整大小。
https://stackoverflow.com/questions/16532962
复制相似问题