Как получить изображение из папки проекта

1

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

Вот мой код

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

Как я могу достичь своего результата?

  • 0
    @mKorbel Спасибо за редактирование. Можете ли вы решить мою проблему?
  • 0
    может быть...
Показать ещё 1 комментарий
Теги:
timer
swing
jlabel
imageicon

2 ответа

1
Лучший ответ

Вы можете перечислить каждый файл, содержащийся в папке:

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. Вы также можете использовать listFiles (FileFilter), чтобы отфильтровать каждый файл, который не является изображением.

  • 0
    я немного запутался, ты мог бы написать для меня маленький код
  • 0
    Я, конечно, не буду делать вашу домашнюю работу :) listFile будет возвращать каждый файл каталога. Просто используйте for loop чтобы перебрать их и добавить в список изображений.
Показать ещё 3 комментария
0

Я бы добавил это в качестве комментария, но еще не имею репутации - делаю

new File("images/myimage.png")

не будет работать, если вы упакуете свой код в банку. Для этого вам нужно будет использовать getResourceAsStream (http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html), и если ваша папка с изображениями находится в корне вашего проекта, вы должны делать:

this.getClass().getResourceAsStream("/images")

Первая черта здесь важна - она обозначает тот факт, что вы переходите от корня проекта. Если вы просто поместите "изображения", это будет выглядеть из любого класса, в который вы помещаете этот код (скажем, вы были в com.somepackage.blah, он будет выглядеть в пакете blah для вашего изображения).

Надеюсь это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню