我的菜单中有Imageview
,显示所选地图的预览。
但是这些地图的大小可能会有所不同,在我的菜单中我有足够的水平空间,但垂直方向我有限制。所以,我想要的是以高度变为40像素的方式缩放ImageView
(这里我也有问题),并且它的宽度相应地以不变形的方式改变。
如果有一种方法让高度自动适应它的高度,我也会非常感激。(它的父级) 这是我的代码:
Label mapChooserLabel = new Label("This is the map you will play on, click to change");
try {
mapPreview = new ImageView(
new Image(getClass().getResource("/files/images/maps/" + chosenMapName + ".gif").toURI().toURL().toString())
);
mapPreview.setFitHeight(40);
mapPreview.setOnMouseClicked(event -> System.out.println("towerChooserPopup should open now!"));
} catch (MalformedURLException | URISyntaxException e) {
e.printStackTrace();
}
HBox mapChooserWrapper = new HBox(mapChooserLabel, mapPreview);
mapChooserWrapper.setId("lineWrapper");
这是我的css:
#lineWrapper{
-fx-alignment: center;
-fx-spacing: 2px;
}
答案 0 :(得分:4)
您可以使用ImageView
的{{3}}方法:
指示是否保留源图像的纵横比 缩放以适合拟合边界框内的图像。
如果设置为true,则会影响此ImageView的尺寸 以下方式*
- 如果仅设置了fitWidth,则缩放高度以保留比率
- 如果只设置了fitHeight,则缩放宽度以保持比例
- 如果两者都设置了,它们都可以缩放以获得最佳宽度高度矩形,同时保留原始宽高比
所以,在你的代码中:
mapPreview.setFitHeight(40);
mapPreview.setPreserveRatio(true);
或者您甚至可以使用setPreserveRatio
调整加载Image
:
mapPreview = new ImageView(
new Image(getClass().getResource("/files/images/maps/" + chosenMapName + ".gif").toURI().toURL().toString(),
40, 200, true, true));
但是在您的情况下,由于您希望将其用作预览,以原始大小加载并存储图像引用更合理,然后您可以在显示原始图像时使用它以避免重新加载图像。