- JPanel是AWT的Canvas和 Panel类的继承类。文本和图形都可以绘制到JPanel实例中,并且.JPanel实例可以用作一个通用容器。
- JRootPane是一个包含在窗体、对话框、窗口、内部窗体和Swing小应用程序等Swing 顶层容器中的容器。
- JLayeredPane 允许把它所包含的组件放置在不同的层中。层控制显示组件的深度。
- JTabbedPane是一个能够包含多个组件的容器。JTabbedPane包含的多个组件一次只能显示一个。
- JTabbedPane的实例包含能够用于选取当前显示的组件的选项卡。
- JSplitPane包含两个组件,这两个组件由一个分隔体所分隔。可以拖动分隔体以改变每个组件所占据的空间大小。
1、JPanel
JPanel是最简单的Swing 组件之一;但它也是使用最多的组件之一。Swing在很多其他组件中使用了JPanel实例;例如,缺省时,JRootPane容器为它的内容窗格和玻璃窗格创建了JPanel实例。
JPanel类具有简单容器和显示图形的画布的双重功能。
1.1JPanel的属性
JPanel没有定义任何它自己的属性;所有的属性都是从JComponent类继承的。
1.2JPanel的事件
JPanel没有它自己需要的事件;所有激发的事件都是从JComponet类继承的。
2、JRootPane
几乎每一个Swing组件都最终处在一个JRootPane实例中,因为所有Swing 顶层容器都包含一个JRootPane实例。根容器提供了一种方便的包容结构。
一个根窗格中的最顶层组件是玻璃窗格。当玻璃窗格可见时,它浮到根窗格中的所有组件之上并截获所有的鼠标事件。
在玻璃窗格之下是一个JLayeredPane实例,正如其名称所提示的那样,该实例把组件放到不同的层上。
分层窗格又进一步包含一个可选的菜单栏和一个内容窗格。内容窗格是小应用程序和应用程序的应用基础。
Swing 为包含一个JRootPane实例的容器定义了一个接口。
2.1 RootPaneContainer接口
2.2 玻璃窗格(CustomGlassPane)
玻璃窗格在所有根窗格组件中是最有趣的,因为玻璃窗格浮在其他组件之上,截获根窗格中的鼠标事件,并且可以是透明的。
这些独特的功能使玻璃窗格具有广泛的特殊用途。从拖放式动画到嫜螂“工具”(小嫜螂在打开和关闭窗口时快速跑动)都适用于揭示玻璃窗格的用途。
玻璃窗格浮在一个根窗格中的所有其他组件之上,因为玻璃窗格是添加到一个根窗格中的第一个组件。
Swing组件的层序或深度是由它们添加到各自容器中的顺序决定的。在同一个容器中,第一个加入到这个容器中的组件在所有其他组件之上显示,而最后添加到这个容器中的组件显示在所有其他组件之下。
当玻璃窗格是可见时,它们还能够截获鼠标事件。当一个鼠标事件在一个AWT容器中发生时,这个事件传递给希望获取鼠标事件的最上层轻量组件。如果一个组件安装了一个鼠标监听器或特别许可了鼠标事件,那么它就是希望获取鼠标事件的。
2.3 内容窗格
内容窗格是小应用程序和应用程序放置它们的组件的地方。缺省情况下,内容窗格是一个用JRootPane . createContentPane方法配备了边框布局管理器的JPanel实例。
2.4 内容窗格和玻璃窗格的布局管理器
缺省情况下,内容窗格和玻璃窗格都是面板(JPanel的实例),它们是用JRootPane类中protected createConentPane和createGlassPane 方法创建的。
用JRootPane . createGlassPane创建的玻璃窗格保留了JPanel实例的布局管理器一个Flowl ayout实例。另一方面,用JRootPane. createConentPane创建的内容窗格配备了一个Border-l ayout实例。
2.5 JRootPane事件
除了响应对关联属性的修改而激发属性变化事件外,JRootPane不激发自己的事件。
3、JLayeredPane
JLayeredPane是一个把组件放在不同的层上的组件。层可以用来控制组件的深度,它比AWT提供的缺省层序机制更精确。
层 | 值 | 描述 |
FRAME_CONTENT_LAYER | -3000 | 最底下的层,根窗格的菜单条和内容窗格就是放在这个层中的 |
DEFAULT_LAYER | 0 | 在窗体内容层之上的层。缺省时,组件就放在这个层中 |
PALETFE_LAYER | 100 | 缺省层上面的层。用于调色板和浮动工具条 |
MODAL_LAYER | 200 | 调色板层上面的层。被模态对话框用于确保对话框出现在组件,调色板和浮动工具条 |
POPUP_LAYER | 300 | 模态层上面的层。被弹出式用于确保弹出式菜单出现在组件,调色板和浮动工具之上 |
DRAG_LAYER | 400 | 最顶层,可用于拖动组件。或用于一个组件必须出现在所有其他组件的情况中 |
JLayeredPane实例中的每一个组件都维护的三个属性:
属性 | 描述 |
Index | 一个分层窗格维护的组件数组的索引。一个组件与它的层序之间有直接的相互关系;带有较小索引值的组件在具有较大索引值的组件之上显示 |
Layer | 一个组件所处的层,处于编号较低的层上的组件在处于编号较高的层上的组件之下显示 |
Postion | 一个组件相对于同一层中其他组件的位置。具有较低的组件在具有较高位置值的之上显示 |
3.1 为组件分配层
每个组件用JLayeredPane.setL ayer方法分配了一个特定的层。
3.2 指定同一层中组件的位置
一个组件和对于同层中其他组件的位置可以通过指定这个组件的位置来控制。JLayeredPane为这个目的提供了一个setPosition方法。
3.3 使用拖动层
由于拖动层处在所有其他层之上,因此,它可以用于在一个分层窗格包含的所有其他组件之上拖动组件。
4、JTabbedPane
选项卡窗格是一种常用的用户界面组件,它们提供了方便地访向多个面板的途径。
Swing的选项卡窗格是用JTabbedPane来实现的。包含在一个JTabbedPane实例中的选项卡有一个组件与它们相关联,这个组件在选项卡的下方显示。选项卡可以显示图标和文本,还可以设置颜色。另外,包含在·-个选项卡窗格中的选项卡还可以与工具提示联系起来。
包含在一个JTabbedPane实例中的选项卡类似于一个JLayeredPane实例中的层,因为选项卡和层都是逻辑结构。即包含在JTabbedPane实例中的选项卡不是 Swing组件。实际上,选项卡仅限于显示图标和文本,不能在选项卡上添加任意其他组件。
4.1 选项卡的位置
JTabbedPane可把选项卡放置在选项卡窗格的左边、右边、顶部和底部。可以在创建JTabbedPane实例时指定选项卡的位置,也可以在创建后用JTabbedPane.setTabPlacement方法设置选项卡的位置。下述常数可用于指定选项卡的位置:
- SwingConstants.TOP
- SwingConstants.BOTTOM
- SwingConstants.LEFT
- SwingConstants.RIGHT
由于JTabbedPane实现 SwingConstants接口,因此,上述常数即可以用SwingConstants.前缀指定,也可以用JTabbedPane.前缀指定。
5、JSplitPane类
Swing 以JSplitPane的形式提供了一个拆分窗格组件,这个组件显示两个组件。在拆分窗格中,组件由一个分隔体隔开,可以拖动这个分隔体以改变组件的大小。包含在一个拆分窗格中组件可以水平放置,也可以垂直放置。
5.1 事件
只有属性变化事件