JavaFX 将不同大小的节点缩放到相同大小

JavaFX Scaling differently sized nodes to the same size

我正在窗格上绘制不同大小的地图。有些看起来不错,有些只是呈现为一个小形状,您必须放大才能使其大小合适。我希望每次初始化时这些地图的大小都大致相同(这样我就不必手动缩放每张地图)。我在绘制它们的窗格的 minmaxxy 上得到了 Point2D 点,地图也是如此(这是一个 Group 的多边形)。我如何设置 PaneminPointGroupminPoint 之间的距离?还是我处理方法不对?

编辑:

 public void setDistance(Group map, Point2D paneSize, Point2D mapSize){
    //um diese distance verschieben, if distance > 10px (scale)
    double d = paneSize.distance(mapSize);
    double scale = ??
    map.setScaleX(scale);
    map.setScaleY(scale);
}

这就是我的计划,但不确定那一行。

要将节点缩放到父节点的大小,大小的差异并不重要。重要的是尺寸的商,更准确地说是高度和宽度的商的最小值(假设你想在一个方向上完全填充父级)。

示例:

@Override
public void start(Stage primaryStage) {
    Text text = new Text("Hello World!");

    Pane root = new Pane();
    root.getChildren().add(text);
    InvalidationListener listener = o -> {
        Bounds rootBounds = root.getLayoutBounds();
        Bounds elementBounds = text.getLayoutBounds();

        double scale = Math.min(rootBounds.getWidth() / elementBounds.getWidth(),
                rootBounds.getHeight() / elementBounds.getHeight());
        text.setScaleX(scale);
        text.setScaleY(scale);

        // center the element
        elementBounds = text.getBoundsInParent();
        double cx = (elementBounds.getMinX() + elementBounds.getMaxX()) / 2;
        double cy = (elementBounds.getMinY() + elementBounds.getMaxY()) / 2;
        text.setTranslateX(rootBounds.getWidth() / 2 - cx + text.getTranslateX());
        text.setTranslateY(rootBounds.getHeight() / 2 - cy + text.getTranslateY());
    };

    root.layoutBoundsProperty().addListener(listener);
    text.layoutBoundsProperty().addListener(listener);

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}