JavaFX 将不同大小的节点缩放到相同大小
JavaFX Scaling differently sized nodes to the same size
我正在窗格上绘制不同大小的地图。有些看起来不错,有些只是呈现为一个小形状,您必须放大才能使其大小合适。我希望每次初始化时这些地图的大小都大致相同(这样我就不必手动缩放每张地图)。我在绘制它们的窗格的 min
和 max
值 x
和 y
上得到了 Point2D
点,地图也是如此(这是一个 Group
的多边形)。我如何设置 Pane
的 minPoint
和 Group
的 minPoint
之间的距离?还是我处理方法不对?
编辑:
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();
}
我正在窗格上绘制不同大小的地图。有些看起来不错,有些只是呈现为一个小形状,您必须放大才能使其大小合适。我希望每次初始化时这些地图的大小都大致相同(这样我就不必手动缩放每张地图)。我在绘制它们的窗格的 min
和 max
值 x
和 y
上得到了 Point2D
点,地图也是如此(这是一个 Group
的多边形)。我如何设置 Pane
的 minPoint
和 Group
的 minPoint
之间的距离?还是我处理方法不对?
编辑:
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();
}