Loops 如何使用forloop将ImageView添加到gridpane

Loops 如何使用forloop将ImageView添加到gridpane,loops,javafx,gridpane,Loops,Javafx,Gridpane,这是我的代码。这会提示一个异常:“IllegalArgumentException:Children:replicate Children added:parent=Grid hgap=5.0,vgap=5.0,alignment=TOP\u LEFT” File File=新文件(“D:\SERVER\SERVER Content\Apps\icons”) File[]filelist1=File.listFiles(); ArrayList filelist2=新的ArrayList();

这是我的代码。这会提示一个异常:“IllegalArgumentException:Children:replicate Children added:parent=Grid hgap=5.0,vgap=5.0,alignment=TOP\u LEFT”

File File=新文件(“D:\SERVER\SERVER Content\Apps\icons”)

File[]filelist1=File.listFiles();
ArrayList filelist2=新的ArrayList();
hb=新的HBox();
对于(文件file1:filelist1){
filelist2.add(file1);
}
System.out.println(filelist2.size());
对于(int i=0;i
将项目添加到
网格窗格
有点不同

要使用GridPane,应用程序需要设置布局 约束子项并将这些子项添加到gridpane 例如。使用静态setter在子对象上设置约束 GridPane类上的方法

应用程序也可以使用结合了这些步骤的方便方法 设置约束和添加子项的步骤

因此,在您的示例中,首先需要确定:一行中需要多少图像?

假设你的答案是4,那么你的代码就变成了:(有不同的方法,我写下了最简单的方法。你可以使用任何东西,行和列的循环是一个很好的选择;) )

//可以设置一次,无需将它们保留在循环中
设置填充(新插图(5));
网格窗格。setHgap(5);
gridpane.setVgap(5);
//为行计数和列计数声明变量
int-imageCol=0;
int imageRow=0;
对于(int i=0;i3){
//重置列
imageCol=0;
//下一排
imageRow++;
}
}

您在使用gridpane之前/之后做了什么?我正在添加目录中的图像列表。添加这些图像时,我的滚动窗格会变得拥挤。如何保持图像之间的间距?
            File[] filelist1 = file.listFiles();
            ArrayList<File> filelist2 = new ArrayList<>();
            hb = new HBox();

            for (File file1 : filelist1) {
                filelist2.add(file1);

            }

            System.out.println(filelist2.size());

                for (int i = 0; i < filelist2.size(); i++) {
                    System.out.println(filelist2.get(i).getName());
                    image = new Image(filelist2.get(i).toURI().toString());

                    pic = new ImageView();
                    pic.setFitWidth(130);
                    pic.setFitHeight(130);

                    gridpane.setPadding(new Insets(5));
                    gridpane.setHgap(5);
                    gridpane.setVgap(5);
                    pic.setImage(image);
                    hb.getChildren().add(pic);  

                }
//Can be set once, no need to keep them inside loop
gridpane.setPadding(new Insets(5));
gridpane.setHgap(5);
gridpane.setVgap(5);

//Declaring variables for Row Count and Column Count
int imageCol = 0;
int imageRow = 0;
for (int i = 0; i < filelist2.size(); i++) {
     System.out.println(filelist2.get(i).getName());
     image = new Image(filelist2.get(i).toURI().toString());

     pic = new ImageView();
     pic.setFitWidth(130);
     pic.setFitHeight(130);

     pic.setImage(image);
     hb.add(pic, imageCol, imageRow );
     imageCol++;

     // To check if all the 4 images of a row are completed
     if(imageCol > 3){
          // Reset Column
          imageCol=0;
          // Next Row
          imageRow++;
     }
}