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

时间:2011-08-17 11:27:00

标签: java swing

我在Java面板中有一个登录表单,其中包含用户名/密码字段。

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

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

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

1 个答案:

答案 0 :(得分:12)

我头脑中的两个选项:

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

  2. 执行以下操作

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

    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);
        }
    }
    

    enter image description here