2014-09-10 1 views
-1

버튼을 누르면 vbox 내에서 이미지 뷰의 파일 이름을 가져와야합니까 ?? 여기에 파일 arraylist가 vbox에 추가되었으며, vbox는 gridpane에 추가되었습니다. vbox.getChildren()을 사용하면 가능합니까 ?? 또는 다른 방법을 진행해야합니다.vbox에서 자식 이름을 가져 오는 방법

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

당신의 코드 조각은 자바 FX 패턴을 따르지 않는 : 첫 번째 for 루프 내에서 각 버튼에 이벤트 핸들러를 추가 할 수 있습니다 그렇게하기 위해

. JavaFX에서 FXML을 사용하여 코드를 작성하는 방법에 대한 [튜토리얼] (http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm)을 읽어보십시오! @ James_D가 이미 지적했듯이, 컨트롤러를 가지고 있고 생성자 내에'Platform.runLater()'를 사용하는 것은 정말로 혼란 스럽습니다. FXML 및 컨트롤러에 대한 자세한 내용은 [Mastering FXML] (http://docs.oracle.com/javafx/2/fxml_get_started/jfxpub-fxml_get_started.htm)의 예제를 참조하십시오. – ItachiUchiha

답변

1

이 코드는 정말 불분명하다, 그리고 나는 완전히 당신이 무슨 일을하는지 이해가 확실하지 않다 :

enter image description here

여기에 코드입니다 : 여기에 더 나은 이해를위한 스크린 샷입니다. (그렇다면이 컨트롤러입니까? 그렇다면 표준 initialize() 메서드 대신 생성자 안에 Platform.runLater()으로 UI를 초기화하는 이유는 무엇입니까? FXML에는 일부 UI 구성 요소가 분명히 정의되어 있고 Java 코드를 컨트롤러에 넣으려면? 매우 어렵습니다.)

그러나 Listfilelist2 (사용자가 선언문을 표시하지 않음)으로되어 있는데, 파일 이름이 포함 된 것 같습니다. 같은 크기의 Button 개의 목록을 만듭니다. 생각을 추측하고있는 것은 각각 에 액션 이벤트 핸들러를 추가하는 것입니다. 각 버튼은 filelist2 목록의 해당 요소와 함께 작업을 수행하는 버튼입니다.

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

관련 문제