Вопрос по swing, java, background-image, jpanel – Фоновое изображение во вложенной JPanel?

1

У меня есть JPanel, которая содержит еще 2 JPanel. Расположенный слева (слева) и справа (rB), я хотел добавить фоновое изображение справа от JPanel (rB).

Но результат, который я получаю,

http://i.imgur.com/tHz1x.jpg

результат, который я хотел

http://i.imgur.com/xHbpx.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)

}

Панель rB блокирует изображение, я хочу, чтобы изображение отображалось на JPanel, а затем добавлялось несколько jlabels и текстовое поле поверх JPanel и изображение позже.

просто для информации: почему вы предоставляетеrB как наблюдатель изображения? какая-то конкретная причина или это ошибка? Harry Joy
//this.paintComponent(g); вызывает рекурсию, которую вы ищетеsuper.paintComponent(g) ПОСЛЕg.drawImage, Хотя использовать JLabel и Z-порядок проще (наверное). Также остальные компоненты должны быть непрозрачными. bestsss

Ваш Ответ

1   ответ
5

BACKGROUND IMAGE OUTPUT

Вот это выглядит без проблем, взгляните:

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));
    }
}
+1 заTwinkle Twinkle Little Star

Похожие вопросы