JavaFX ScrollPane不适合宽度

时间:2017-01-09 17:52:20

标签: javafx imageview scrollpane

我有一个带有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的宽度,但为什么呢?我错过了什么?

1 个答案:

答案 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);
祝你好运!