使用for循环只显示最后一张图像

时间:2017-04-19 02:30:58

标签: arrays for-loop javafx

我写了一些代码,如下所示,试图显示20个图像的数组,但只显示最后一个图像。我很困惑,期待着你的帮助!

 String []img={"a.png","b.png","c.png"...20 more};
 for(int x=0;x<20;x++)
    {
        images[x]=new Image(img[x]);
        views[x]=new ImageView(images[x]);


//put the images in the buttons on GridPane
        for(int i=0;i<4;i++){//row
            for(int j=0;j<5;j++){//column
                buttons[5*i+j]=new Button();
                buttons[5*i+j].setGraphic(new ImageView(images[x]));
                gridPane.add(buttons[5*i+j], j, i);
                buttons[5*i+j].setPrefHeight(120);
                buttons[5*i+j].setPrefWidth(120);
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

您将所有三个循环嵌套在一起。所以,在伪代码中:

for each of the 20 images:
    for each row:
        for each column:
            create a button showing the image in the row/column

或等同于:

for each of the 20 images:
    for each cell:
        create a button showing the image in the cell

因此,在最外层循环的第一次迭代中,您使用按钮填充网格,所有按钮都显示第一个图像。在最外层循环的第二次迭代中,使用按钮填充网格,每个按钮显示第二个图像。等等。

因此,网格中的每个单元格都有20个按钮:所有单元格都将放在彼此的顶部,只有最后添加的单元格才会显示。

每个单元格中只需要一个按钮:

String[] img = {"a.png","b.png","c.png" /*...20 in totalv*/};

for(int x = 0 ; x < 20 ; x++) {
    images[x]=new Image(img[x]);
    views[x]=new ImageView(images[x]);
}

//put the images in the buttons on GridPane
for(int i = 0 ; i < 4 ; i++) {  //row
    for(int j = 0 ; j < 5 ; j++ ) {    //column
        int index = 5 * i + j 
        buttons[index]=new Button();
        buttons[index].setGraphic(views[index]);
        gridPane.add(buttons[index], j, i);
        buttons[index].setPrefHeight(120);
        buttons[index].setPrefWidth(120);
    }
}