JavaFX 将不同大小的节点扩展到相同的大小



我在窗格上绘制不同大小的地图。有些看起来不错,有些只是呈现为一个小形状,您必须放大才能使其达到合适的尺寸。我希望每次初始化时这些地图的大小大致相同(这样我就不必手动缩放每个地图)。我有minPoint2D分,xmax值和绘制它们的窗格的y,地图也是如此(这是多边形的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();
}

最新更新