1. 程式人生 > >關於Swing中JFrame等頂級容器的層次還有設置背景的方式

關於Swing中JFrame等頂級容器的層次還有設置背景的方式

平時 etl 層次結構 正是 tco src 結構 ima java

資料來自:http://blog.csdn.net/qq_32006373/article/details/49659129

http://yuncode.net/code/c_5196327caac3917

在做一個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等頂級容器的層次還有設置背景的方式