需要帮助批量添加文件路径名称中包含 00 的图像 (Java)

Need help batch adding images with 00 in name of filepath (Java)

我在将图像批量添加到 JButton 网格时遇到问题。我正在尝试使用 for 循环,字符串名称中使用了变量。

图片名称如下:

32px-Shuffle001.png

32px-Shuffle821.png

等等

这是我尝试添加到图像中的代码部分。第三个 setIcon 有效,但前两个无效。我很困惑为什么会这样。

另外,图像文件不是连续的数字。例如,我有 001,002,003,004,005,但没有 007,008,然后在 009,010 继续。我正在尝试找出一种让它跳到下一张可用图像的好方法。

总的来说,这段代码是用于三消解谜器的,这是一个用于放置在拼图网格上的图标的选择网格,因此我需要能够调用与按钮 ID 关联的正确图像。

            for (int i = 0; i < 1000; i++) {
            JButton selectionClicky = new JButton();
            if (i < 10) {
                selectionClicky.setIcon(new ImageIcon("src/img/32px-Shuffle" + "00"
                        + i + ".png"));
            }
            if (i < 100){
                selectionClicky.setIcon(new ImageIcon("src/img/32px-Shuffle"+ "0"
                        + i + ".png"));
            }
            if (i < 1000){
                selectionClicky.setIcon(new ImageIcon("src/img/32px-Shuffle"
                        + i + ".png"));
            }
            selectionClicky.setFocusable(false);
            selectionMainPanel.add(selectionClicky);
            selectionButtonList.add(selectionClicky);
        }

永远不要在任何路径引用中使用 src,这是一个很好的迹象表明事情会出错,而是根据您的要求使用 Class#getResourceClass#getResourceAsStream

基本上,一般的想法是在尝试加载之前测试资源是否实际存在,例如...

String path = String.format("/img/32px-Shuffle%03d", i);
URL resource = getClass().getResource(path);
if (resource != null) {
    BufferedImage img = ImageIO.read(resource);
    selectionClicky.setIcon(new ImageIcon(img));
}

通常,ImageIO 优于使用 ImageIcon,主要是因为 ImageIO 在由于某种原因无法加载图像时抛出 IOException(而不是默默地失败)并且在图像完全加载之前不会 return

有关 ImageIO

的更多详细信息,请参阅 Reading/Loading an Image