【问题标题】:How to retrieve image from project folder如何从项目文件夹中检索图像
【发布时间】:2018-05-23 11:33:29
【问题描述】:

我正在尝试从我能够做到的文件夹图像中随机播放图像。我必须传递图像的名称但我不想传递图像的名称我只想给出文件夹的名称并且所有图像都应该从那里我该怎么做

这是我的代码

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

如何实现我的输出?

【问题讨论】:

  • @mKorbel 感谢您的编辑,您能解决我的问题吗
  • 看来that可以帮到你

标签: java swing timer jlabel imageicon


【解决方案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(FileFilter) 来过滤掉每个不是图像的文件。

【讨论】:

  • 我有点困惑,你能不能帮我写一点代码
  • 我当然不会做你的功课 :) listFile 将返回目录的每个文件。只需使用 for loop 遍历它们并将它们添加到您的图像列表中。
  • 如果目标目录在项目类路径中,那没有帮助。
  • 他说原始代码有效,所以我想它确实有帮助。
  • 目标目录为工程类路径
【解决方案2】:

我会将此添加为评论,但还没有代表 - 正在做

new File("images/myimage.png")

如果您将代码打包到 jar 中,将无法正常工作。为此,您需要使用 getResourceAsStream (http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html),如果您的 images 文件夹位于项目根目录,您可以:

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

这里的第一个斜线很重要 - 它表示您从项目根目录开始。如果你只是放“图像”,它会从你放此代码的任何类中查找(假设你在 com.somepackage.blah 中,它会在你的图像的 blah 包中查找)。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2021-11-03
    • 2015-05-15
    • 1970-01-01
    • 2020-03-18
    • 2017-10-07
    • 2016-10-03
    相关资源
    最近更新 更多