2013-01-01 3 views
0

버튼을 클릭하여 Scollpane에 여러 이미지를 추가하고 싶습니다. 아래 코드를 시도하지만 이미지가 표시되지 않습니다.이미지보기 ScrollPane에서 동적으로 JavaFx

@FXML private void OnClick(ActionEvent ae) 
{ 
    getGalleryView(); 
} 
public void getGalleryView() 
{ 
    ScrolPane sp=new ScroPane(); 
Hbox hb=new Hbox(); 
Image [] images=new Image[5]; 
ImageView []pics=new ImageView[5]; 
final String [] imageNames = new String [] {"fw1.jpg", "fw2.jpg", 
    "fw3.jpg", "fw4.jpg", "fw5.jpg"}; 

for (int i = 0; i < 5; i++) { 
     images[i] = new Image(getClass().getResourceAsStream(imageNames[i])); 
     pics[i] = new ImageView(images[i]); 
     pics[i].setFitWidth(100); 
     pics[i].setPreserveRatio(true); 
     hb.getChildren().add(pics[i]); 
     sp.setContent(hb); 

    } 
} 

답변

0

당신은 장면에 스크롤을 추가해야

@FXML private void OnClick(ActionEvent ae) 
{ 
    getGalleryView(ae); 
} 
public void getGalleryView(ActionEvent ae) 
{ 
    ScrolPane sp=new ScroPane(); 
    Hbox hb=new Hbox(); 
    Image [] images=new Image[5]; 
    ImageView []pics=new ImageView[5]; 
    final String [] imageNames = new String [] {"fw1.jpg", "fw2.jpg", 
    "fw3.jpg", "fw4.jpg", "fw5.jpg"}; 

    for (int i = 0; i < 5; i++) { 
     images[i] = new Image(getClass().getResourceAsStream(imageNames[i])); 
     pics[i] = new ImageView(images[i]); 
     pics[i].setFitWidth(100); 
     pics[i].setPreserveRatio(true); 
     hb.getChildren().add(pics[i]); 
     sp.setContent(hb); 

    } 

    Scene scene = ((Node) ae.getSource()).getScene(); 
    ((Pane) scene.getRoot()).getChildren().add(sp); 
} 

나는 루트 노드가 창 또는 그 서브 클래스 중 하나라고 여기 가정한다.

0

ScrolPane sp = new ScroPane(); 오류?

편집 : 비슷한 방법을 개발하고있었습니다. 내 작품은 괜찮아. 원하는지 확인할 수 있습니다.

private List<String> listFileNames(File folder) throws NullPointerException{ 
    List<String> list = new ArrayList<>(); 

    for (File file : folder.listFiles()) { 
     if (file.isDirectory()) 
      listFileNames(file); 
     else { 
      System.out.println(file.getName()); 
      list.add(file.getName()); 
     } 
    } 
    return list; 
} 

private void insertImages(List<String> list, Hero thisHero) { 
    int column = 0; 
    int row = 0; 
    for (String path:list) { 
     String fullPath = "file:"+thisHero.getHeroClass().getFile()+"\\"+path; 
     ToggleButton button = new ToggleButton(); 
     button.setBackground(Background.EMPTY); 
     button.setGraphic(new ImageView(new Image(fullPath))); 
     grid.add(button,column,row); 
     column++; 
     if (column == 5) { 
      row++; 
      column = 0; 
     } 
    } 
} 

원하는 경우 더 작성할 수 있습니다. 목록을 사용하기 때문에 항목을 쉽게 추가 할 수 있습니다.

첫 번째 방법을 사용하여 이미지 파일로 채워진 폴더에서 모든 파일 이름을 나열 할 수 있습니다.

두 번째 방법은 새로운 ImageView를 그래픽이있는 ToggleButtons로 채우는 작업을 수행합니다. 방금 버튼으로 개념을 변경 했으므로 코드를 변경하지 않아도 자신의 게으름에 대해 유감스럽게 생각합니다.

Path는 정확한 파일 이름이고 thisHero.getHeroClass().getFile()은이 이미지가있는 디렉토리의 경로를 반환합니다.

grid.add(button, column, row)이 버튼을 이전에 만든 격자 패널에 추가합니다. 그것은 내 애플 리케이션, 모든 코드를 공유하지 않아서 미안하지만,이 스 니펫이 유용 할 수 있다고 생각.

EDIT2 : 오류 정보가있는 경우 제공 할 수도 있습니다.