往JFrame中添加背景图片同时不遮挡控件

往JFrame中添加背景图片

最终效果展示

在这里插入图片描述

实现方法

首先要知道JLayeredPane(层面板)是其他所有面板的父级,在JRootPane面板的上面,它再次覆盖窗体的整个表面,containPane(内容面板)是被添加到JLayeredPane上的。
知道这个以后,只要将带有图片的标签添加到层面板,然后再将控件面板设为透明即可实现上述图片的效果,知道思路后,看下面的代码理解一下应该就OK了。

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

public class Frame_Test {
    public static void main(String[] args) {
        JFrame jFrame=new JFrame("打字游戏"); //创建一个窗口
        jFrame.setSize(400,600);//设置窗口大小
        jFrame.setLocationRelativeTo(null);//窗口居中
        jFrame.getContentPane().setLayout(null);//无布局,记得下面添加控件时要设置它们位置和大小
        JPanel imPanel=(JPanel) jFrame.getContentPane();//注意内容面板必须强转为JPanel才可以实现下面的设置透明
        imPanel.setOpaque(false);//将内容面板设为透明
        ImageIcon icon=new ImageIcon("src/bg.jpg");//背景图
        JLabel label = new JLabel(icon);//往一个标签中加入图片
        label.setBounds(0, 0, jFrame.getWidth(), jFrame.getHeight());//设置标签位置大小,记得大小要和窗口一样大
        icon.setImage(icon.getImage().getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_DEFAULT));//图片自适应标签大小
        jFrame.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE));//标签添加到层面板

        JLabel testword=new JLabel("测试");
        testword.setFont(new Font("方正舒体", Font.PLAIN, 30));//设置字体
        testword.setForeground(Color.white);//设置标签字体为白色
        testword.setBounds(jFrame.getWidth()/3,jFrame.getHeight()/3,jFrame.getWidth()/3,50);//设置标签位置和大小
        testword.setHorizontalAlignment(JLabel.CENTER);//设置标签文字水平居中
        jFrame.getContentPane().add(testword);//将一个标签添加到内容面板
        jFrame.setVisible(true);//设置窗口可见
    }
}

猜你喜欢

转载自blog.csdn.net/coolyuan/article/details/107054388