在Netbeans中显示从文件夹到JLabel的随机图像

时间:2014-01-11 09:48:28

标签: java image swing random netbeans-7

我的项目包含一个名为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。但我需要随机拍摄图像(一次一张图像)。

1 个答案:

答案 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的建议,作为文件问题的修复

  

我能想到的最好方法是:

     
      
  1. 创建一个小助手类,用于创建图像列表。
  2.   
  3. 将该列表写入File,每行一个名称。
  4.   
  5. 将文件包含为资源(最简单的位置是图像所在的位置)。
  6.   
  7. 使用getResource(String)获取URL
  8.   
  9. 在运行时阅读它。
  10.