我无法批量添加图像到JButton网格。我正在尝试使用for循环,其变量用于字符串名称。
图像的名称如下:
32PX-Shuffle001.png
32PX-Shuffle821.png
等
这是我尝试在图像中添加的代码部分。第三个setIcon工作,但前两个没有。我很困惑为什么会这样。
此外,图像文件不是连续的数字。例如,我有001,002,003,004,005,但不是007,008,然后是009,010。我正试图找出一种方法让它跳到下一张可用的图像。
总体而言,此代码适用于匹配3拼图解算器,这是一个选择网格,用于放置拼图网格上的图标,因此我需要能够调用与按钮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);
}
答案 0 :(得分:2)
不要在任何路径引用中使用src
,这表明事情会出错,而是根据您的要求使用Class#getResource
或Class#getResourceAsStream
。< / p>
基本上,一般的想法是在尝试加载资源之前测试资源是否确实存在,例如......
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
(而非静默失败)并且在图像完全加载之前不会返回
有关ImageIO