JFrame界面层次结构
学到swing界面的时候,难免会遇到设置背景图片的情况,那么如何添加就略是复杂了。原本以为是直接在JFrame界面直接添加个图片就好,可是却会发现这根本行不通。之后才知道JFrame添加图片有几个步骤,一般是在LayeredPane最底层添加一个带图片的标签,然后将ContentPane设置为透明,并将上面的部件也设置为透明,那么一个背景图片就设置好了。以下就是一小段背景图片的设置代码:
实例化一个背景图片
ImageIcon bjt= new ImageIcon("image/bjt.jpg");
实例化一个带背景图片的标签
JLabel lbjt=new JLabel(bjt);
//设置标签位置大小(大小与图片一致)
lbjt.setBounds(0, 0, bjt.getIconWidth(), bjt.getIconHeight());
//在LayeredPane最底层上添加一个带图片的标签
frame.getLayeredPane().add(lbjt,new Integer(Integer.MIN_VALUE));
// JPanel contentPanel = (JPanel) frame.getContentPane();
// contentPanel.setOpaque(false);
((JPanel)frame.getContentPane()).setOpaque(false);//此句与上两句意义相同
那么LayeredPane、ContentPane又是什么东西呢?实际上,在JFrame上已经有4个层次了,分别是 RootPane、LayeredPane、ContentPane、GlassPane,而其中 GlassPane 默认是透明。以下就是就是其视觉层次图:
在其中的ContentPane,实际上也就是我们在JFrame上添加组件的地方。而在 JDK1.4时,在JFrame上添加部件是一定要用getContentPane().add(……) 来添加部件。
再看另一张图:
从这里可以看出contentpane实际上是添加在layeredpane上的一个控件,而layeredpane与classpane是直接添加在rootpane上的,而rootpane是直接添加在JFrame上的。
由此也就能清楚的理解JFrame的结构层次了。