2014-09-10 107 views
-1

我需要在按下按鈕後在vbox中獲取imageview的文件名?這裏的文件arraylist已添加到vbox,vbox到gridpane是否可以使用vbox.getChildren()?或者我應該如何繼續。 這裏是爲了更好地理解截圖:如何從vbox獲取兒童名字

enter image description here

下面的代碼:

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

你的代碼片段不遵循JavaFX的模式。閱讀[教程](http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm),瞭解如何在JavaFX中使用FXML進行編碼!正如@James_D所指出的,你有一個控制器,並且在其構造函數中使用'Platform.runLater()'是非常令人困惑的。要了解有關FXML和控制器的更多信息,請閱讀[掌握FXML]的示例(http://docs.oracle.com/javafx/2/fxml_get_started/jfxpub-fxml_get_started.htm) – ItachiUchiha 2014-09-11 06:15:08

回答

1

這種代碼真的不清楚,我不知道我完全理解你在這裏做什麼。 (這是一個控制器嗎?如果是這樣,你爲什麼要在構造函數中而不是在標準的initialize()方法中初始化Platform.runLater()中的UI?爲什麼一些UI組件明顯定義在FXML中,還有一些定義在Java中代碼在控制器?這是很難遵循)。

但是,它似乎有你Listfilelist2(你不顯示聲明),我猜包含文件名。您創建一個相同大小的Button列表。我猜想的想法是添加一個動作事件處理程序到每個按鈕,它與filelist2列表的相應元素做了一些事情。

爲了做到這一點,你可以將事件處理程序添加到每個按鈕的第一for循環中:

for (int i = 0; i < filelist2.size(); i++) { 
     downloadbtn = new Button("Download"); 
     btnar.add(downloadbtn); 
     final int index = i ; 
     downloadbtn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       // do something with filelist2.get(index); 
       // ... 
      } 
     }); 
    } 
+0

+1第一段:) – ItachiUchiha 2014-09-11 06:09:10