2014-09-10 3 views
-1

Мне нужно получить имя файла изображения в vbox после нажатия кнопки? Здесь файл arraylist был добавлен в vbox, vbox в gridpane Возможно ли использовать vbox.getChildren() ?? или как мне следует продолжать. вот скриншот для лучшего понимания:как getChildname из 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. Прочтите [tutorial] (http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm) о том, как использовать FXML в JavaFX! Как уже указывал @James_D, у вас есть контроллер и использование 'Platform.runLater()' внутри своего конструктора действительно запутанно. Чтобы узнать больше о FXML и контроллерах, прочитайте примеры [Mastering FXML] (http://docs.oracle.com/javafx/2/fxml_get_started/jfxpub-fxml_get_started.htm) – ItachiUchiha

ответ

1

Этот код действительно неясна, и я не уверен, что я полностью понимаю, что вы здесь делаете. (Является ли это контроллером? Если да, то почему вы инициализируете пользовательский интерфейс в Platform.runLater() внутри конструктора, а не в стандартном методе initialize()? Почему некоторые из ваших компонентов пользовательского интерфейса, по-видимому, определены в FXML и другие, определенные в Java код в контроллере? Это очень сложно сделать.)

Но, похоже, у вас есть List под названием filelist2 (вы не показываете объявление), которое я угадываю, содержит имена файлов. Вы создаете список из 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

Смежные вопросы