所以我正在上课。我想用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));
}
}
}
答案 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。