JFrame放置背景图片

为了给JFrame放置背景图片可以使用JLayeredPane,这是一个分层的面板,它一共分了七层,我们在这里只需要使用其中的两层就可以实现放置背景图片,下面一层放背景图片,上面一层放控件,另外需要注意的是,使用了JLayeredPane之后只能使用控件的setBounds()方法来设置大小和位置,如果不设置的话,将不会显示出来加进去的控件,代码如下:
LayeredFrame.java

package swing;

import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class LayeredFrame extends JFrame{
    /**
     * 分层panel
     */
    private JLayeredPane layeredPane;
    /**
     * 放置背景图片的panel
     * 放置在下层
     */
    private JPanel backPane;
    /**
     * 组件放置在上层
     */
    private JButton button;
    /**
     * 组件放置在上层
     */
    private JTextField text;
    /**
     * 放置内容的面板
     */
    private JPanel componentPane;
    /**
     * 放置图片的label
     */
    private JLabel labelImage;

    public LayeredFrame() {
        // 获取图片
        ImageIcon imageIcon= new ImageIcon("resource\\swing.png");

        layeredPane = new JLayeredPane();
        //设置JFrame的JLayeredPane
        this.setLayeredPane(layeredPane);
        labelImage = new JLabel(imageIcon);
        backPane = new JPanel();
        backPane.add(labelImage);
        //将内容面板加入JLayeredPane最下层
        layeredPane.add(backPane, JLayeredPane.DEFAULT_LAYER);
        //JLayeredPane中只能使用setBounds放置设置位置,没有LayoutManager
        backPane.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight());
        labelImage.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight());
        componentPane = new JPanel();
        //为componentpanel设置布局管理器
        componentPane.setLayout(new BorderLayout());
        //将componentPanel加入JLayeredPane中上面一层
        layeredPane.add(componentPane, JLayeredPane.MODAL_LAYER);
        //使用setBounds为componentPane设置位置和大小
        componentPane.setBounds(20, 20, 300, 100);
        text = new JTextField();
        componentPane.add(text, BorderLayout.NORTH);
        button = new JButton("text");
        componentPane.add(button, BorderLayout.SOUTH);
        //setOpaque()方法设置为false,那么没有添加组件的地方将不会绘制出来
        //会显示下面一层的内容
        componentPane.setOpaque(false);
        this.setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight());
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);

    }

    public static void main(String[] args) {

        new LayeredFrame();
    }

}

效果如下:
这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值