Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加载.jpeg并设置为JLabel?_Java_Image_Swing_File Io_Jlabel - Fatal编程技术网

Java 加载.jpeg并设置为JLabel?

Java 加载.jpeg并设置为JLabel?,java,image,swing,file-io,jlabel,Java,Image,Swing,File Io,Jlabel,所以我在课堂上做这个作业。我假设用3x3 jlabel随机地用X或Y图像填充JFrame。我从google上获取了一些小图片,并将它们放在Eclipse中Java项目的源文件夹中,并将它们命名为“X.jpeg”和“O.jpeg” 我在使用字符串“X”和“O”时就可以实现这一点,但我不知道如何让图像工作。非常感谢您的任何建议 这就是我现在使用的。我正在将Jlabel作为图像添加到JFrame 大宗报价 import java.awt.*; 导入java.awt.image.buffereImage

所以我在课堂上做这个作业。我假设用3x3 jlabel随机地用X或Y图像填充JFrame。我从google上获取了一些小图片,并将它们放在Eclipse中Java项目的源文件夹中,并将它们命名为“X.jpeg”和“O.jpeg”

我在使用字符串“X”和“O”时就可以实现这一点,但我不知道如何让图像工作。非常感谢您的任何建议

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

大宗报价

import java.awt.*;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.net.URL;
导入javax.imageio.imageio;
导入javax.swing.*;
公共类第12章第7节扩展了JFrame{
公共静态void main(字符串[]args){
第12_7章框架=新的第12_7章();
框架。设置尺寸(400400);
第12章(“第7章”);
frame.setLocationRelativeTo(空);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
公开章节12_7(){
buffereImage x=ImageIO.read(新文件(“/x.jpeg”);
buffereImage o=ImageIO.read(新文件(“/o.jpeg”);
JPanel p1=新的JPanel();
p1.设置布局(新网格布局(3,3));
添加(p1);
int[]ran=新的int[9];
对于(int j=0;j<9;j++){
ran[j]=(int)(Math.random()*2);
}
对于(int i=0;i<9;i++){
if(ran[i]==0){
p1.添加(新的JLabel(x,JLabel.CENTER));
}
其他的
p1.添加(新的JLabel(o,JLabel.CENTER));
}
}

}不要使用
新图像图标(“X.jpeg”)
,这假定
X.jpeg
是一个存在于HD上的文件,其上下文与您从中执行程序的上下文相同
ImageIcon
在出现问题时也不会抛出任何异常,这非常烦人

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

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

请查看以了解更多详细信息


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

所以现在我使用BuffereImage来加载它们,但当我尝试添加新的JLabel(x)或JLabel(o)时,会出现编译错误。JLabel似乎不喜欢BuffereImage数据类型,并不断建议使用字符串。使用类似于
的新JLabel(ImageIcon(ImageIcon.read(getClass().getResource(“/X.jpeg”));
,如果愿意,可以将其分解为单个语句(这可能是个好主意)
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));
    }
}