Я пытаюсь создать настольное приложение Java, в котором я хочу перетасовать изображение из папки проекта. Я могу добиться этого, но мне нужно передать имя рисунка, но я не хочу передавать имя рисунка в моем коде. Я просто хочу использовать имя папки, и он должен автоматически извлекать оттуда все изображения.

Вот мой код:

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));
}
0
user3506824 8 Апр 2014 в 11:49

2 ответа

Лучший ответ

Предполагая, что файлы хранятся в файловой системе (и, исходя из вашего примера, они есть), вы можете просто получить список файлов из заданного каталога ...

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

Оттуда вам просто нужно будет перебрать список и добавить каждого в List ...

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

Посмотри на

Больше подробностей...

1
MadProgrammer 8 Апр 2014 в 07:51

Этот код должен работать с 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);
1
Alberto 8 Апр 2014 в 07:57