Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 将背景图像添加到JPanel_Java_Image_Swing_Jpanel_Paintcomponent - Fatal编程技术网

Java 将背景图像添加到JPanel

Java 将背景图像添加到JPanel,java,image,swing,jpanel,paintcomponent,Java,Image,Swing,Jpanel,Paintcomponent,我正在用Java开发一个棋盘游戏。对于游戏板本身,我试图将板的图像作为整个JPanel的背景,这填充了JFrame。我找到了一种方法来做到这一点,但只有当文件存储在本地时,它才需要能够从GUI所在的包中获取图像 package Gui; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.image

我正在用Java开发一个棋盘游戏。对于游戏板本身,我试图将板的图像作为整个JPanel的背景,这填充了JFrame。我找到了一种方法来做到这一点,但只有当文件存储在本地时,它才需要能够从GUI所在的包中获取图像

package Gui;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

//Proof of concept for setting an image as background of JPanel

public class JBackgroundPanel extends JPanel {
    private BufferedImage img;

    public JBackgroundPanel() {
        // load the background image
        try {
            img = ImageIO.read(new File(
                    "C:\\Users\\Matthew\\Desktop\\5x5     Grid.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // paint the background image and scale it to fill the entire space
        g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
    }
}
我读过使用ImageIcon是一个很好的修复方法,但我不知道如何正确使用它

编辑1-我在这里找到了我的答案 我的工作区中的图片格式也有问题。谢谢你的帮助

  • 确保要加载的资源位于Jar文件中
  • 使用
    getClass()
  • 因此,例如,如果图像位于Jar中的/images文件夹中,您可以使用

     ImageIO.read(getClass().getResource("/images/5x5    Grid.jpg"));
    

    例如…

    您可能希望搜索此网站,因为这已经被问了很多。如果您希望从jar文件访问图像,那么您将希望将其作为资源来执行,即,
    ImageIO.read(getClass().getResourceAsStream(resourcePath))资源路径将与类文件相关。注意:ImageIcon不是一个“好的解决方案”。是的,确切地说,是1+。不过,文件名中的空格有些地方让我发痒。@hovercraftfullofels是的,这些空格让我感到不安,而且这些空格是一个坏拷贝,文件名是5x5 Grid.gif,1个空格。现在我已经使用了您的示例img=ImageIO.read(getClass().getResource(“/images/5x5 Grid.jpg”);img变成了一种URL类型,paintComponet部分不能将URL作为参数否,
    ImageIO
    采用
    URL
    (除其他外),读取图像a返回一个
    buffereImage
    。绘制
    buffereImage