Добавление фонового изображения в JPanel

Я работаю над созданием настольной игры на 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:UsersMatthewDesktop5x5     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-хорошее решение, но я не знаю, как его правильно использовать.

Edit 1 - я нашел свой ответ здесь http://www.coderanch.com/how-to/java/BackgroundImageOnJPanel У меня также было изображение, отформатированное неправильно в моем рабочем пространстве. Спасибо за помощь

1 ответов


  1. убедитесь, что ресурс, который вы хотите загрузить, находится в файле Jar
  2. использовать getClass().getResource("/path/to/resource") для получения URL ссылка на ресурс, который может быть использован ImageIO читать ресурс

так, например, если изображение было расположено в папке /images внутри вашей банки, вы можете использовать

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

например...