加载.jpeg并设置为JLabel?

时间:2013-04-11 03:17:57

标签: java image swing file-io jlabel

所以我正在上课。我想用X或Y图像随机填充带有3x3 JLabel的JFrame。我从谷歌那里得到了一些小图片并将它们放在Eclipse中我的Java项目的源文件夹中,并将它们称为“X.jpeg”和“O.jpeg”。

我只是在使用字符串“X”和“O”时才能使用它,但我无法弄清楚如何使图像工作。非常感谢任何建议。

好的,这就是我现在正在使用的。我把Jlabel添加到JFrame作为图像!!!!

  

块引用

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;


public class Chapter12_7 extends JFrame {

public static void main(String[] args) {
    Chapter12_7 frame = new Chapter12_7();
    frame.setSize(400, 400);
    frame.setTitle("Chapter12_7");
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
public Chapter12_7(){

    BufferedImage x = ImageIO.read(new File("/X.jpeg"));
    BufferedImage o = ImageIO.read(new File("/O.jpeg"));
    JPanel p1 = new JPanel();
    p1.setLayout(new GridLayout(3, 3));
    add(p1);


    int[] ran = new int[9];

    for(int j = 0; j < 9; j++){
        ran[j] = (int) (Math.random() * 2);
    }

    for (int i = 0; i < 9; i++){
        if(ran[i] == 0){
            p1.add(new JLabel( x , JLabel.CENTER));
        }
        else
            p1.add(new JLabel( o , JLabel.CENTER));
    }
}

}

1 个答案:

答案 0 :(得分:1)

不要使用new ImageIcon("X.jpeg");,这假设X.jpeg是HD中存在的文件,与您执行程序的位置相同。如果出现问题,ImageIcon也不会抛出任何异常,这非常烦人。

如果文件存储在Jar文件中,则需要使用getClass().getResource("/X.jpeg")

您还应该使用ImageIO.read来阅读图片。如果无法读取图像,这将(除其他外)抛出异常。

有关详细信息,请查看Reading/Loading an Image

另外,我相信在Eclipse中,资源应该存储在resources文件夹中,这些会自动添加到你的应用程序Jar中。我不确定如果它们在你的源目录中会发生什么,因为我不使用Eclipse。