我的项目包含一个名为images的图像文件夹。我想在按下按钮时将图像随机显示到框架中的JLabel
。我尝试了下面的代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
Image im=new ImageIcon(this.getClass().getResource("/images/a1.jpg")).getImage();
ImageIcon iconLogo = new ImageIcon(im);
jLabel2.setIcon(iconLogo);
}
此代码仅显示图像a1。但我需要随机拍摄图像(一次一张图像)。
答案 0 :(得分:5)
使用类似
的内容..getResource("/images/a" + randomNumber + ".jpg")
为randomNumber
变量生成一个随机数。只要你的所有图像都有相同的前缀和不同的数字后缀,你应该没问题。
如果它们都不同,则将每个字符串路径存储到String数组中,随机数将是索引
getResource("/images/" + pathArray[randomNumber])
示例强>
String[] imageNames {"hello.jpg", "world.png", "!.gif"};
Random rand = rand = new Random();
....
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
int index = rand.nextInt(3);
Image im=new ImageIcon(this.getClass()
.getResource("/images/" + imageNames[index])).getImage();
ImageIcon iconLogo = new ImageIcon(im);
jLabel2.setIcon(iconLogo);
}
更新到OP评论
“哦!如果文件夹包含100张图片,那看起来非常困难。我的项目需要更多图片”
然后通过File API
file.list()
< - 返回String[]
File file = new File("src/images");
String[] imageNames = file.list();
...
int index = rand.nextInt(imagNames.length);
只要所有文件都是文件而不是目录,这应该可以正常工作。
<强>更新强>
正如以下评论中所讨论的,已经注意到上述答案可能在部署时不起作用。这是@ AndrewThompson的建议,作为文件问题的修复
我能想到的最好方法是:
- 创建一个小助手类,用于创建图像列表。
- 将该列表写入
File
,每行一个名称。- 将文件包含为资源(最简单的位置是图像所在的位置)。
- 使用
getResource(String)
获取URL
。- 在运行时阅读它。
醇>