于是想说加个背景

时间:2022-04-24 07:55:33

在做一个Java高文业,做了一个登录界面后感受太单调,于是想说加个配景。先是直接弄了个ImageIcon,然后改成Image,再直接用网上的一个重写paint()的要领来设置配景,告成了,但是却发明component都被笼罩失了。于是开始百度有关JFrame等容器的条理问题。

从视觉效果上看,JFrame的布局是这样的:

于是想说加个背景

可以看出,
Frame 的最底层是 RootPane,
然后是 LayeredPane
再上面就是 ContentPane
最顶层是 GlassPane

最顶层的 GlassPane 默认是透明的,而这个ContentPane,就是我们平时用来添加控件的要领,此刻来说说这个ContentPane

ContentPane默认是不透明的,完整的添加控件的要领是:

frame.getContentPane.add(...);

此刻简写成frame.add(...);

也可以说contentPane就是个放在 LayeredPane 上的一个JPanel。

所以让我们从模型的角度来看看JFrame的条理:

于是想说加个背景

此刻来讲讲如何搞个配景:

首先还是要了解框架JFrame中的条理布局。
JFrame中的条理漫衍及相对关系是:
最底层是:JRootPane;

第二层是:JlayerPane,这层上面包罗一层ContentPane(默认不透明),,也正是我们常说的内容面板。

所以一般我们拖放的控件就是在ContentPane层上。;

最上层就是:GlassPane(默认是透明的);

 

然后这里介绍一个要领:

道理:

我们把图片安排在第二层:JlayerPane容器上(操作JLabel来放),然后让最上层的
ContentPane透明,这样就实现了配景的设置。

 

来看代码:

JPanel jpanelOfFrame=(JPanel)this.getContentPane();//拿到ContentPane,JPanel有设置透明的要领 //设置配景图片的部分 String imageUrl = "src/image/f0f600978623446f8ae2d189d3ac0fdf.jpg";//配景图路径 ImageIcon icon = new ImageIcon(imageUrl); JLabel labelBackground = new JLabel(icon);   labelBackground.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());//设置这个label使得图片恰好充塞标签 this.getLayeredPane().add(labelBackground,new Integer(Integer.MIN_VALUE));//this就是JFrame jpanelOfFrame.setOpaque(false);//设置contentpane为透明

关于Swing中JFrame等*容器的条理还有设置配景的方法