将背景图像添加到JPanel

Mat*_*w G 6 java swing image 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.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经读过使用ImageIcon是一个很好的修复,但我不知道如何正确使用它.

编辑1 - 我在这里找到了答案 http://www.coderanch.com/how-to/java/BackgroundImageOnJPanel 我的工作区中的图片格式错误.谢谢您的帮助

Mad*_*mer 6

  1. 确保要加载的资源位于Jar文件中
  2. 使用getClass().getResource("/path/to/resource")以获得URL所述资源,其可以通过使用参考ImageIO读取资源

因此,例如,如果图像位于Jar内的/ images文件夹中,则可以使用

 ImageIO.read(getClass().getResource("/images/5x5    Grid.jpg"));
Run Code Online (Sandbox Code Playgroud)

例如...

  • 是的,确切地说,1 +.关于文件名中的空格的东西让我感到痒. (2认同)
  • @HovercraftFullOfEels是的,这些空间让我感到不安 (2认同)