按下按钮后,我需要在vbox中获取imageview的文件名?这里文件arraylist已添加到vbox,vbox到gridpane是否可以使用vbox.getChildren()?或者我应该怎么做。 这是一个更好理解的截图:
这是代码:
private ArrayList<Button> btnar;
private VBox vb;
private Button downloadbtn;
@FXML
private ScrollPane displayscroll;
private GridPane gridpane;
public HomeUI_2Controller() {
Platform.runLater(new Runnable() {
@Override
public void run() {
gridpane = new GridPane();
displayscroll.setContent(gridpane);
btnar = new ArrayList<>();
for (int i = 0; i < filelist2.size(); i++) {
downloadbtn = new Button("Download");
btnar.add(downloadbtn);
}
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);
vb = new VBox();
vb.getChildren().addAll(pic, (Button) btnar.get(i));
gridpane.add(vb, imageCol, imageRow);
GridPane.setMargin(pic, new Insets(2, 2, 2, 2));
imageCol++;
// To check if all the 3 images of a row are completed
if (imageCol > 2) {
// Reset Column
imageCol = 0;
// Next Row
imageRow++;
}
}
**downloadbtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
System.out.println("sssss");
System.out.println( vb.getChildren().contains(pic.getId()));
}
});**
}
});
}
答案 0 :(得分:1)
这段代码真的不清楚,我不确定我完全明白你在这里做了什么。 (这是一个控制器吗?如果是这样,为什么要在构造函数内的Platform.runLater()
中而不是在标准initialize()
方法中初始化UI?为什么你的一些UI组件显然是在FXML,以及控制器中Java代码中定义的其他内容?这很难遵循。)
但是,似乎你有一个名为List
的{{1}}(你没有显示声明),我猜它包含文件名。您创建一个相同大小的filelist2
列表。我猜这个想法是向每个按钮添加一个动作事件处理程序,它对Button
列表的相应元素执行某些操作。
为了做到这一点,您可以将事件处理程序添加到第一个filelist2
循环内的每个按钮:
for