Swing的容器结构与JLayeredPane的使用:
Swing的容器包括JApplet、JFrame、JDialog、JWindow、JInternalFrame,JInternalFrame是lightweight容器,其他都是heavyweight的。当我们要加入某个组件到Swing的容器中时,并不是直接加入到RootPane中,而是加到其下的某一成员(LayeredPane或ContentPane)中。
在RootPane的结构中,ContentPane与MenuBar只是LayeredPane的其中一层,我们称此层为Frame-Content Layer。可通过Frame_Content_Layer常数得到Frame-Content Layer在LayeredPane的层次。
如何得知LayeredPane中层次关系呢?Z-order。
Z-order本身具有两个整数之,一个是代表层的深度,另一个代表同层的相关位置。当Z-order的Layer树脂越小时,表示其位置就越在低层,反之则在越上层。在JLayeredPane类中,共定义了6个Z-order的Layer常数供用户参考:
DEFAULT_LAYER:Layer数值是0,以整数对象Integer(0)来表示。一般我们加入的组件若没有标记层次,默认值就是把组件放在此层中。
PALETTE_LAYER:Layer数值是100,位于DefaultLayer之上,
一般用于放置工具栏。
MODAL_LAYER:200,PaletteLayer之上,放置对话框。
POPUP_LAYER:300,ModalLayer之上,用于快速菜单与工具栏提示中。
DRAG_LYAYER:400,PopupLayer之上,用于拖拽组件。
FRAME_CONTENT_LAYER:-30000。一般上是最底层的Layer,用来表示ContentPane与MenuBar的位置,大部分情况下不会更改次数值。
Z-order的另一个数值Position:与Layer正好相反,同层的组件,若Position数值越小者在越上层,Position数值越大者则在越下层。Position数值从-1~n-1,n是指同层中组件个数,-1代表最底层,0代表最上层。
一般程序语言都会提供良好的Z-order自动管理机制,不用手动处理。用户只需将所需组件直接加入到ContentPane即可。
JInternalFrame的使用:
与JFrame几乎一样,唯一不同是JInternalFrame使lightweight的,因此JInternalFrame能够利用Java的LookandFeel功能完全不同于原有操作系统所提供的外形,也比JFrame更有弹性。
一般将JInternalFrame加入到DesktopPane管理,DesktopPane是一种特殊的LayeredPane,用来建立虚拟桌面(VirtualDesktop),它可以显示并管理众多JInternalFrame之间的层次关系。
JPanel的使用:
Panel也是Java时常用到的容器之一,Panel除了可以让组件加入外,还可以有效地利用Panel使面板管理更容易。Swing的JPanel支持double buffering的功能,使得JPanel在处理动画上更加流畅。
JSplitPane的使用:
SplitPane一次可将两个组件同时显示在两个显示区中,若想要将组件同时显示在多个区域内,必须同时使用多个SplitPane,两个常数用来设置是水平分割还是垂直分割:HORIZONTAL_SPLIT与VERTICAL_SPLIT。
JTabbedPane的使用:
JTabbedPane就如同放置文件的文件夹一般,当用户想要看那一份文件时,只要循着标签上的说明文字来找寻,找到之后将它显示出来即可。
JTabbedPane的时间处理以ChangeEvent为主,每当选定标签时都回出发相应操作。
JScrollPane的使用:
ScroolPane可以用来滚动窗口,事实上是由JViewPort与JScrollBar所组成。JViewPort主要负责显示内容区域大小,形状为一个平面矩形;而JScrollBar则产生窗口滚动轴。
JScrollPane可利用下面参数来设置滚动轴的出现时机,这些参数是定义在ScrollPaneConstants 接口中的:
HORIZONTAL_SCROLLBAR_ALWAYS:显示水平滚动轴
HORIZONTAL_SCROLLBAR_NEEDED:内容水平区域大于显示区域时显示滚动轴
HORIZONTAL_SCROLLBAR_NEVER:不显示滚动轴
VERTICAL_SCROLLBAR_ALWAYS:显示垂直滚动轴
VERTICAL_SCROLLBAR_AS_NEEDED:内容垂直区域大于显示区域时显示滚动轴
VERTICAL_SCROLLBAR_NEVER:不显示滚动轴
JScrollBar的使用:
若想对滚动轴作更细的设置,如在拖拽一次滚动多少区域时,就必须了解JScrollBar提供的功能了。4个参数:
value:JScrollBar一开始的起始位置,0表示最顶端。
extent:延伸区,限制滚动轴可以滚动的范围。
minimum:最小刻度值。
maximum:最大刻度值。