在JavaFX中将ImageView缩放到特定高度

时间:2016-07-08 16:32:17

标签: java javafx imageview scaling

我的菜单中有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;
}

1 个答案:

答案 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));

但是在您的情况下,由于您希望将其用作预览,以原始大小加载并存储图像引用更合理,然后您可以在显示原始图像时使用它以避免重新加载图像。