Background image in a nested JPanel?
Asked Answered
M

1

1

I have a JPanel which contains 2 more JPanel. Located on the left(leftBox) and the right(rB), I wanted to add a background image on the right JPanel (rB).

But the result I get is

https://i.sstatic.net/mkq5S.jpg

the result I wanted

https://i.sstatic.net/fIERs.jpg

public void paintComponent(Graphics g)
{
    //this.paintComponent(g);
    if(wdimage != null) g.drawImage(wdimage,0,0,800,800,rB); //(image,location x, location y, size x, size y)

}

The rB Panel is blocking the image, what I want is to display the image on the JPanel, and add some jlabels and text field on top of the JPanel and image later on.

Messenia answered 20/6, 2012 at 5:9 Comment(2)
//this.paintComponent(g); causes recursion you are looking for super.paintComponent(g) AFTER g.drawImage. Although using a JLabel and Z-order is easier (probably). Also the rest of the components will have to be non-opaque.Filar
just for info: Why are you providing rB as an image observer? any specific reason or its a mistake?Glutamine
M
5

BACKGROUND IMAGE OUTPUT

Here it's appearing without any problems, have a look :

import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

public class PanelExample
{
    private void createAndDisplayGUI()
    {
        JFrame frame = new JFrame("Panel Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setOpaque(true);
        contentPane.setBorder(
                    BorderFactory.createMatteBorder(
                                    5, 5, 5, 5, Color.WHITE));
        contentPane.setBackground(Color.WHITE);
        contentPane.setLayout(new BorderLayout(10, 10));

        ImagePanel imagePanel = new ImagePanel();
        //imagePanel.createGUI();
        BlankPanel blankPanel = new BlankPanel();

        contentPane.add(blankPanel, BorderLayout.LINE_START);
        contentPane.add(imagePanel, BorderLayout.CENTER);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new PanelExample().createAndDisplayGUI();
            }
        });
    }
}

class ImagePanel extends JPanel
{
    private BufferedImage image;

    public ImagePanel()
    {
        setOpaque(true);
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
        try
        {
            image = ImageIO.read(new URL("http://gagandeepbali.uk.to/gaganisonline/images/background.jpg"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        createGUI();
    }

    public void createGUI()
    {
        setLayout(new GridBagLayout());
        JPanel loginPanel = new JPanel();
        loginPanel.setOpaque(false);
        loginPanel.setLayout(new GridLayout(2, 2, 2, 2));
        JLabel userLabel = new JLabel("USERNAME : ");
        userLabel.setForeground(Color.WHITE);
        JTextField userField = new JTextField(10);
        JLabel passLabel = new JLabel("PASSWORD : ");
        passLabel.setForeground(Color.WHITE);
        JPasswordField passField = new JPasswordField(10);

        loginPanel.add(userLabel);
        loginPanel.add(userField);
        loginPanel.add(passLabel);
        loginPanel.add(passField);

        add(loginPanel);
        System.out.println("I am finished");
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(300, 300));
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}

class BlankPanel extends JPanel
{
    public BlankPanel()
    {
        setOpaque(true);
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
        setBackground(Color.WHITE);
    }

    @Override
    public Dimension getPreferredSize()
    {
        return (new Dimension(100, 300));
    }
}
Misanthropy answered 20/6, 2012 at 5:45 Comment(1)
+1 for Twinkle Twinkle Little StarSaturated

© 2022 - 2024 — McMap. All rights reserved.