0

我想通过单击按钮在 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);

    }
} 
4

2 回答 2

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

我在这里假设您的根节点是窗格或其子类之一。

于 2013-01-04T18:49:08.720 回答
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 的新 ImageViews。我只是将概念更改为按钮,很抱歉我懒惰地没有更改代码以完全满足您的需求。

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

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

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

于 2018-02-05T17:46:12.297 回答