如何使一个的ImageView来调整自己当窗口被调整(How do you make an Imag

2019-08-04 03:22发布

我有行和列的任意数量GridPane,并填写每个单元与ImageView的。

现在,这GridPane被包含在AnchorPane,所以当窗口得到调整的GridPane增大或缩小罚款,但ImageViews不改变其大小。

我有什么做的,使的ImageView利用其在GridPane单元的大小?

Answer 1:

这可能有两方面的原因。

1)你可以为网格窗格中没有定义行和列的约束。 即使当GridPane的增长,它的细胞不一定会超越他们的首选大小。 实现这一目标的最佳方式是用百分比宽度/高度定义约束,像这样:

public class ImageGrid extends Application {
    @Override
    public void start(final Stage stage) throws Exception {
        final GridPane pane = new GridPane();
        for (int i = 0; i < 10; i++) {
            final ImageView imageView = new ImageView(new Image("..."));
            pane.getChildren().add(imageView);
            GridPane.setConstraints(imageView, i%5, i/5);
        }

        pane.getColumnConstraints().addAll(
             columnWithPercentage(20),
             columnWithPercentage(20),
             columnWithPercentage(20),
             columnWithPercentage(20),
             columnWithPercentage(20)
        );

        pane.getRowConstraints().addAll(
                rowWithPercentage(50),
                rowWithPercentage(50)
        );

        final Scene scene = new Scene(pane);
        stage.setScene(scene);
        stage.setWidth(800);
        stage.setHeight(600);
        stage.show();
    }

    private ColumnConstraints columnWithPercentage(final double percentage) {
        final ColumnConstraints constraints = new ColumnConstraints();
        constraints.setPercentWidth(percentage);
        return constraints;
    }

    private RowConstraints rowWithPercentage(final double percentage) {
        final RowConstraints constraints = new RowConstraints();
        constraints.setPercentHeight(percentage);
        return constraints;
    }
    public static void main(String[] args) {
        Application.launch(args);
    }
}

这将创建一个网格的5x2 ImageView小号至极,将填补网格窗格的整个空间同样。

2)上述解决方案将增加你的形象的看法,但ImageView直到被告知类本身不会拉伸图像超出其正常大小。 你可能有绑定ImageView#fitWidthPropertyImageView#fitHeightProperty ,以及如果你想将图像按比例增加当电网扩大。



Answer 2:

我是一个初学者到JavaFX和我有类似的问题。 我有其中载有BorderPane的AnchorPane。 所述BorderPane的中心包含在GridPane(gridPaneMaze)。 此gridPaneMaze使用的阵列的ImageView [7] [7]的图像以填充我gridpane的每个单元具有正方形.png文件。

我想我的图片与窗口的高度变化。 因为我用正方形,列的宽度应自动改变。

起初,当我调整我的窗口,我的专栏是比我更广阔的图像和图像的高度是要大的行。

试错后,我发现,这样做有问题:

IMAGES我有for循环的行和列之间以及在每个小区中我设置与相应的图像的ImageView的(这始终是一个正方形)横动,并用于此的高度结合(I由行数除以gridpane的高度):

images[i][j].fitHeightProperty().bind(gridPaneMaze.heightProperty().divide(7));
images[i][j].setPreserveRatio(true);

我想你也可以通过列数使用widthProperty和鸿沟。 但是,由于大多数显示器比宽度更小的高度,我使用的高度。

GRIDPANE:

我做了我gridPane与FXML而是说对价值观没有什么区别。

<BorderPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<center>
    <GridPane fx:id="gridPaneMaze" centerShape="false" minHeight="0.0" minWidth="0.0"   BorderPane.alignment="TOP_LEFT">
        <columnConstraints>
            <ColumnConstraints halignment="CENTER" />
            <ColumnConstraints halignment="CENTER" />
            <ColumnConstraints halignment="CENTER" />
            <ColumnConstraints halignment="CENTER" />
            <ColumnConstraints halignment="CENTER" />
            <ColumnConstraints halignment="CENTER" />
            <ColumnConstraints halignment="CENTER" />
        </columnConstraints>
        <rowConstraints>
            <RowConstraints valignment="CENTER" />
            <RowConstraints valignment="CENTER" />
            <RowConstraints valignment="CENTER" />
            <RowConstraints valignment="CENTER" />
            <RowConstraints valignment="CENTER" />
            <RowConstraints valignment="CENTER" />
            <RowConstraints valignment="CENTER" />
        </rowConstraints>
        <children>
            //...
        </children>
        <BorderPane.margin>
            <Insets left="10.0" top="10.0" />
        </BorderPane.margin>
    </GridPane>
</center>

BORDERPANE:我添加了一个borderpane我anchorpane,所以我把所有锚为“0”。

GRIDPANE:有minWidth 0和0了minHeight设置我没有prefWidth,prefHeight,maxWidth和maxHeight。

ROWS:我设置什么,但垂直对齐中心(没有了minHeight,maxHeight的prefHeight)

列:我设置什么,但横向对齐为中心(无minWidth,maxWidth的prefWidth)

希望这有助于...



文章来源: How do you make an Imageview to resize itself when the Window gets resized
标签: javafx-2