在ScrollPane JavaFx中动态显示图像

时间:2013-01-01 14:30:52

标签: javafx

我想通过单击按钮在Scollpane中添加多个图像我尝试下面的代码,但它不会显示图像任何想法?

@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);

    }
} 

2 个答案:

答案 0 :(得分: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);
} 

我在这里假设你的根节点是一个Pane或它的一个子类。

答案 1 :(得分: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;
        }
    }
}

如果你愿意,我可以写更多。我使用列表是因为它易于添加项目。

您可以使用第一种方法从您填充图像文件的文件夹中获取要列出的所有文件名。

第二种方法可以使用图形填充带有ToggleButtons的新ImageView。我只是将概念改为按钮,对于我不改变代码以完全符合您的需求的懒惰感到遗憾。

Path是确切的文件名,thisHero.getHeroClass().getFile()返回包含此图像的目录的路径。

grid.add(button, column, row)将此按钮添加到我之前制作的网格窗格中。这是我的应用程序,很抱歉没有共享所有代码,但我认为这个代码段可能很有用。

EDIT2 :如果有错误信息,您也可以向我们提供错误信息。