Search code examples
javaswingjframeimageicon

How to set an image as background in JFrame


I can't figure out on how to fix the problem. Please help me. Thank you.

Here are the codes:

package com.gabriel.mvc.app;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

import com.gabriel.mvc.shapeimpl.CarRenderer;
import com.gabriel.mvc.shapesfx.MyShape;
import com.gabriel.mvc.shapesfx.Renderer;

public class CarView extends JFrame {
    Image image;
    MyShape car;
    Renderer renderer = new CarRenderer();
    void init(MyShape car) {
        this.car = car;
    }
    void initUI() {     
        setVisible(true);
        image = new ImageIcon("2284910.jpg").getImage();
        setBounds(300,100,500,500);
        setSize(500,500);
    }
    
    public void paint(Graphics g)
    {
        g.clearRect(0,0,600,600);
        g.drawImage(image, 0, 0, null);
        renderer.draw(g, car);
    }
}

Here's the output, only solid color. Image not set as background. :( enter image description here

Here's my expected output, I edited it on Photoshop. enter image description here


Solution

  • You may refer on this code just replace your image source and add your CarRenderer after the drawImage method of Graphics.

    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import java.awt.Image;
    import java.awt.Graphics;
    
    public class SampleImageBg extends JFrame{ 
        private JDesktopPane panel;
    
        public SampleImageBg() {
            panel = new javax.swing.JDesktopPane() {
                private Image image;
                {
                    try {
                        image = ImageIO.read(getClass().getResource("bg.jpeg"));// source of your background image
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
                @Override
                protected void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
                    g.clearRect(50,0,300,300); // add your renderer here instead
                }
            };
    
            add(panel);
            setVisible(true);
            setSize(400, 600);
        }
    
        public static void main(String[] args) {
            new SampleImageBg();
        }
    }
    

    enter image description here