我有一个带有Pane的ScrollPane。最初Pane是空的,但我动态地添加了一些ImageView(垂直排序)。应调整图像大小,使其适合ScrollPane,而无需水平滚动。这是我到目前为止所做的:
// Pane that is content of ScrollPane and member variable of object
private MigPane imagesPane = new MigPane("fill");
...
// creating ScrollPane in some method and add to current view
ScrollPane spImages = new ScrollPane();
spImages.setContent(imagesPane);
spImages.setFitToWidth(true);
add(spImages, "wrap");
...
// adding images in another method
getPm().getImages().forEach(image -> {
ImageView img = new ImageView(image);
img.setPreserveRatio(true);
img.fitWidthProperty().bind(imagesPane.widthProperty());
imagesPane.add(img, "wrap");
});
这不会调整图像大小以使其适合ScrollPane的宽度,但为什么呢?我错过了什么?
答案 0 :(得分:0)
图片仅适用于content
的宽度,而不是高度,但如果添加:
scrollPane.setFitToHeight(true); // it will fits to the height also !
还有:
img.fitHeightProperty().bind(imagesPane.heightProperty()); // to bind the height of the imageview to the content's height
由于某种原因,我不知道这种方法setPreserveRatio(true)
会导致问题。 我认为它通过限制图像的大小来保持图像的质量。如果你删除它,你的图像将正确适合两个水平轴和垂直轴。
setPreserveRatio :指示在缩放以适合拟合边界框内的图像时是否保留源图像的纵横比。
修改:
如果你想知道你需要一个VBox
,那将取决于你的布局(内容):
VBox container = new VBox();
ScrollPane sp = new ScrollPane(container);
sp.setPrefSize(400, 400);
sp.setFitToWidth(true);
ImageView img = new ImageView(getClass().getResource("imgA.png").toString());
img.setPreserveRatio(true);
img.fitWidthProperty().bind(container.widthProperty());
ImageView img2 = new ImageView(getClass().getResource("imgB.png").toString());
img2.setPreserveRatio(true);
img2.fitWidthProperty().bind(container.widthProperty());
container.getChildren().addAll(img,img2);
祝你好运!