将背景图像添加到包含其他组件的面板

Raj*_*esh 2 java swing

我在Java面板中有一个登录表单,带有用户名/密码字段.

我想在此登录表单下方添加背景图片.

实现这一目标的最佳方法是什么?

提供示例代码的额外奖励,因为我很难搞清楚这一点.

aio*_*obe 12

我头脑中的两个选项:

  1. 在绘制子组件之前,覆盖包含登录表单的面板的paint方法以绘制背景图像.

  2. 请执行下列操作

    1. 创建背景图像面板(覆盖paintCompanent方法以绘制图像).
    2. 将此面板的布局管理器设置为BorderLayout
    3. opaque(false)在包含登录表单的面板上设置,
    4. 使用BorderLayout.CENTER将登录表单面板添加到后台面板.

演示第二种方法:

import java.awt.*;
import javax.swing.*;

class BgPanel extends JPanel {
    Image bg = new ImageIcon("water.jpg").getImage();
    @Override
    public void paintComponent(Graphics g) {
        g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
    }
}

class LoginPanel extends JPanel {
    LoginPanel() {
        setOpaque(false);
        setLayout(new FlowLayout());
        add(new JLabel("username: ")); add(new JTextField(10));
        add(new JLabel("password: ")); add(new JPasswordField(10));
    }
}

public class FrameTestBase extends JFrame {
    public static void main(String args[]) {
        JPanel bgPanel = new BgPanel();
        bgPanel.setLayout(new BorderLayout());
        bgPanel.add(new LoginPanel(), BorderLayout.CENTER);

        FrameTestBase t = new FrameTestBase();
        t.setContentPane(bgPanel);
        t.setDefaultCloseOperation(EXIT_ON_CLOSE);
        t.setSize(250, 100);
        t.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述