知识储备: 1.JFrame中是有很多层次关系的,具体可以去自己查一下;
主要思路: 1.把图片添加到标签里(把标签的大小设为和图片大小相同),把标签放在分层面板的最底层; 2.把窗口面板设为内容面板并设为透明、流动布局。 3.之后把组件和面板添加到窗口面板就可以; 大白话翻译: 把JFrame想象成一个桌子,桌子上面有个木板,组件和面板就是木板上的物品,我们就是把桌子上的木板换为玻璃板,然后把背景图放在玻璃板下面,把物品放在玻璃板上面;
哔哩哔哩有此视频教程:
示例代码:
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ImageDemo {
public static void main(String[] args) {
JFrame jf=new JFrame("背景图片测试");
//1.把图片添加到标签里(把标签的大小设为和图片大小相同),把标签放在分层面板的最底层;
ImageIcon bg=new ImageIcon("src/images/bg.jpg");
JLabel label=new JLabel(bg);
label.setSize(bg.getIconWidth(),bg.getIconHeight());
jf.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
//2.把窗口面板设为内容面板并设为透明、流动布局。
JPanel pan=(JPanel)jf.getContentPane();
pan.setOpaque(false);
pan.setLayout(new FlowLayout());
//3.之后把组件和面板添加到窗口面板就可以;
JButton btn=new JButton("测试按钮");
pan.add(btn);
jf.setSize(bg.getIconWidth(),bg.getIconHeight());
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}