0

所以我正在为课堂做这个作业。我想用 X 或 Y 图像随机填充 3x3 JLabels 的 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));
    }
}

}

4

1 回答 1

1

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

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

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

查看阅读/加载图像以获取更多详细信息。

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

于 2013-04-11T03:20:34.520 回答