Как получить изображение из папки проекта
Я пытаюсь перетасовать изображение из папки, что я могу сделать. что я должен передать имя изображения, но я не хочу передавать имя изображения, я просто хочу дать имя папки, и все изображение должно оттуда, как я могу это сделать
Вот мой код
public class main1 extends javax.swing.JFrame {
private JLabel ecause = new JLabel();
private List<BufferedImage> list = new ArrayList<BufferedImage>();
private List<BufferedImage> shuffled;
private JLabel label = new JLabel();
private int width = 700;
private int height = 700;
private Timer timer = new Timer(4000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
update();
}
});
public main1() {
this.getContentPane().setBackground(new java.awt.Color(153, 153, 0));
this.setUndecorated(true);
ecause.setText(" eCause List");
ecause.setBounds(0, 1278, 496, 88);
ecause.setFont(new java.awt.Font("Times New Roman", 1, 40));
ecause.setBackground(new java.awt.Color(255, 153, 0));
ecause.setOpaque(true);
this.add(ecause);
initComponents();
try {
list.add(resizeImage(ImageIO.read(new File("images\\Picture2.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture3.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture4.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture5.png"))));
} 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);
jLabel3.setIcon(new ImageIcon(icon));
}
}
Как мне достичь результата?
2 ответа
Вы можете перечислить каждый файл, содержащийся в папке, как это:
File[] files = new File("images/").listFiles();
Обратите внимание, что это также даст подкаталоги.
Так что вместо
list.add(resizeImage(ImageIO.read(new File("images\\Picture2.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture3.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture4.png"))));
list.add(resizeImage(ImageIO.read(new File("images\\Picture5.png"))));
Вы можете просто перебрать все файлы, заданные listFiles
метод. Вы также можете использовать listFiles(FileFilter), чтобы отфильтровать каждый файл, который не является изображением.
Я бы добавил это в качестве комментария, но пока не имею представителя - делаю
new File("images/myimage.png")
не будет работать, если вы упакуете свой код в банку. Для этого вам нужно использовать getResourceAsStream ( http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html), и если ваша папка с изображениями находится в корневом каталоге вашего проекта, вы должны делать:
this.getClass().getResourceAsStream("/images")
Первый слеш здесь важен - он обозначает тот факт, что вы идете из корня проекта. Если вы просто добавите "images", он будет выглядеть из любого класса, в который вы поместили этот код (скажем, вы были в com.somepackage.blah, он посмотрел бы в пакете blah для вашего изображения).
Надеюсь это поможет!