如何改变图像列表?

时间:2014-04-08 07:49:14

标签: java swing list jlabel shuffle

我试图创建一个Java桌面应用程序,我想从项目文件夹中移植图像。我能够实现这一点,但我必须传递pic的名称,但我不想在我的代码中传递任何图片名称。我只想使用文件夹名称,它应该自动从那里检索所有图像。

这是我的代码:

public class Main1 extends JFrame
{
      private java.util.List<BufferedImage> list = new ArrayList<BufferedImage>();
    private java.util.List<BufferedImage> shuffled;
    private JLabel label = new JLabel();
       private int width = 708;
    private int height = 800;
    private Timer timer = new Timer(4000, new ActionListener() {
      @Override
       public void actionPerformed(ActionEvent e) {
        update();
       }
   });

  public Main1(  )
  {
        super("Simple Timer");
      {
getContentPane().setBackground(new java.awt.Color(153,153,0));
} 
 try {
           list.add(resizeImage(ImageIO.read(new File("images\\1.jpg"))));
            list.add(resizeImage(ImageIO.read(new File("images\\2.jpg"))));
            list.add(resizeImage(ImageIO.read(new File("images\\3.jpg"))));
            list.add(resizeImage(ImageIO.read(new File("images\\4.jpg"))));
        } catch (IOException e) {
            e.printStackTrace();
        }
        shuffled = new ArrayList<BufferedImage>(list);
        Collections.shuffle(shuffled);
        timer.start();
         }

private BufferedImage resizeImage(BufferedImage originalImage) throws IOException {
        BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, width, height, null);
        g.dispose();
        return resizedImage;
    }

   private void update() {
      if (shuffled.isEmpty()) {
            shuffled = new ArrayList<BufferedImage>(list);
            Collections.shuffle(shuffled);
        }

        BufferedImage icon = shuffled.remove(0);
        jLabel6.setIcon(new ImageIcon(icon));
}

2 个答案:

答案 0 :(得分:1)

假设文件存储在文件系统上(并根据您的示例),您只需从给定目录中获取文件列表......

File files[] = new File("images").listFiles();

从那里你只需要迭代列表并将每一个添加到List ......

for (File file : files) {
    list.add(resizeImage(ImageIO.read(file));
}

看看

了解更多详情......

答案 1 :(得分:1)

此代码适用于Java 7

File dir = new File("images");
List<File> files = Arrays.asList(dir.listFiles(new FileFilter() {
   boolean accept(File pathName) {
      return pathName.getName().toLowerCase().endsWith(".jpg");
   }
}));
for (File f: files) {
   list.add(resizeImage(ImageIO.read(f)));
}
Collections.shuffle(list);

使用Java 8,此代码可以写为

File dir = new File("images");
List<File> files = Arrays.asList(dir.listFiles(
   (pathName) -> pathName.getName().toLowerCase().endsWith(".jpg");
));
for (File f: files) {
   list.add(resizeImage(ImageIO.read(f)));
}
Collections.shuffle(list);

以及NIO.2和流API:

Path folder = Paths.get("images");
List<Path> paths = Files.list(folder)
   .filter((path) -> path.toString().toLowerCase().endsWith(".jpg"))
   .collect(Collectors.asList());
for (Path path: paths) {
   list.add(resizeImage(ImageIO.read(path.toFile())));
}
Collections.shuffle(list);