最近心血来潮想学一下老古董swing结果刚要做第一个就被难倒了,琢磨了好久,关于JFrame中使用label添加背景且不会覆盖其他组件的方法,不多说代码先放上在讲述下我自己的理解,因为也是刚接触不一定是正确的理解。。毕竟这个东西现在碰的人也挺少的。。。
public static void main(String[] args) {
JFrame frame=new JFrame();
//要想改变接下里添加的组件的大小或者位置布局要为null
frame.setLayout(null);
ImageIcon icon=new ImageIcon("src/背景.jpg");
JLabel label1=new JLabel(icon);
//为了显示不同容器中组件的叠加,加一个label2
JLabel label2=new JLabel("密码");
label2.setBackground(Color.RED);
label2.setOpaque(true);
label2.setBounds(30, 40, 100, 90);
label1.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
//将label放入frame的底层
frame.getLayeredPane().add(label1,new Integer(Integer.MIN_VALUE));
//设置顶层容器,可在上面添加组件
JPanel jpanel2=new JPanel();
jpanel2=(JPanel) frame.getContentPane();
//让其透明
jpanel2.setOpaque(false);
jpanel2.add(label2);
frame.setBounds(0, 0,375,667);
frame.setVisible(true);
}
首先我们把需要的背景给label这里大小要自己设置好,然后就要使这个label放入JFrame的底层,getlayerpane()这个函数会返回一个容器对象,且可以对其有深度操作,然后我们只要在上面再放一个容器这个容器是我们放组件的容器,就是内容面板,设置为content pane,且让他完全透明,最后在该容器上添加组件就可以了。
还有一点就是有时候往往不能按我们想要的布局进行放置组件,所以我们一开始可以让布局置空,然后用setbound慢慢设置当然这需要一定的耐心
这是我的结果: