【问题标题】:Display random images from folder to JLabel in Netbeans在 Netbeans 中显示从文件夹到 JLabel 的随机图像
【发布时间】:2014-01-30 09:35:39
【问题描述】:

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

【问题讨论】:

  • 查看ImageViewer 以获取有关显示多个图像的提示。 1) 为了尽快获得更好的帮助,请发帖MCVE。 2) 例如,获取图像的一种方法是热链接到this answer 中看到的图像(另一种方法显示在ImageViewer 代码中)。

标签: java image swing random netbeans-7


【解决方案1】:

使用类似的东西

..getResource("/images/a" + randomNumber + ".jpg")

randomNumber 变量生成一个随机数。只要你所有的图片都有相同的前缀和不同的数字后缀,你应该没问题。


如果它们都不同,则将每个字符串路径存储到一个字符串数组中,随机数将是索引

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

只要所有文件都是文件而不是目录,这应该可以正常工作。


更新

正如下面在 cmets 中所讨论的,已注意到上述答案在部署时可能不起作用。这是@AndrewThompson 提出的解决文件问题的建议

我能想到的最好办法是:

  1. 创建一个小的帮助类来创建图像列表。
  2. 将该列表写入File,每行一个名称。
  3. 将文件作为资源包含(最简单的位置是图像所在的位置)。
  4. 使用getResource(String) 获得URL
  5. 在运行时重新读入。

【讨论】:

  • 文件夹是否包含不同的图像,例如 png、jpg、jpeg?
  • 你把所有的文件名放到一个字符串数组中
  • 哦!如果文件夹包含 100 张图片似乎很难。我的项目需要更多图片。
  • @user3164246,然后通过File API..file.list()将文件名加载到数据结构中
  • @user3164246 查看我的更新
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 2020-01-07
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2012-05-02
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多