Setting background images in JFrame

background, image, java, jframe, swing

Solution

There is no built-in method, but there are several ways to do it. The most straightforward way that I can think of at the moment is:

- Create a subclass of `JComponent`.

- Override the `paintComponent(Graphics g)` method to paint the image that you want to display.

- Set the content pane of the `JFrame` to be this subclass.

Some sample code:

class ImagePanel extends JComponent {
    private Image image;
    public ImagePanel(Image image) {
        this.image = image;
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}

// elsewhere
BufferedImage myImage = ImageIO.read(...);
JFrame myJFrame = new JFrame("Image pane");
myJFrame.setContentPane(new ImagePanel(myImage));

Note that this code does not handle resizing the image to fit the `JFrame`, if that's what you wanted.

Problem

Are any methods available to set an image as background in a `JFrame`?

Original source