Swing的版面结构:
Swing中几乎所有的组件都从JCompoment衍生而来,也就是说这些组件都是lightweight的,均是由纯Java代码编写而成,可对组件做最优化操作来节省系统资源,并增加组件的使用弹性。
至于JFrame、JDialog、JWindow与JApplet,是heavyweight组件,必须使用到native代码来画出这四个窗口组件,因此要在操作系统中显示窗口画面,必须使用到操作系统的窗口资源。
四个窗口组件我们统称为最上层(Top-Level)组件,其余的Swing组件都必须直接或间接地依附在窗口组件上才能被显示。
四个窗口(最上层)组件都实现了RootPaneContainer接口,该接口用于取得和设置各种容器:JRootPane、GlassPane、LayeredPane和ContentPane。其中JRootPane只是一个虚拟的容器,不能在其内增加任何组件,它由GlassPane和LayeredPane组成(LayeredPane里拥有ContentPane和MenuBar,MenuBar为可选),若要在最上层组件上加入组件,必须在LayeredPane或LayeredPane里的ContentPane上。
1.GlassPane:透明的面板,主要功能是捕获JFrame上的任何事件。默认值是不可见的,但可以设置为可见的。
2.LayeredPane:可重叠组件的面板,本身也是个容器,可直接在此容器中加入组件。
3.ContentPane:最重要最常用的容器。它是LayeredPane的一层,一般均视为最底层。通常我们会将组件至于最上层组件的ContentPane层上,而不会加在LayeredPane中,这样可以让系统自动调整其层次关系。
版面管理器(LayoutManager):
介绍:AWT中的有BorderLayout、FlowLayout、GridLayout、CardLayout、GridBagLayout,Swing中的有BoxLayout、ScrollPaneLayout、ViewportLayout、OverlayLayout。最后三个一般由系统自动管理,用户无需用到。当然不是一定要使用管理器,可通过seyLayout(null)实现手动设置组件位置。
1.BorderLayout:
将版面划分成东南西北中五个区域,可以设置将组件放到任意一个区域中。两个构造函数为无间距与有间距。
2.FlowLayout:
将组件一个接一个往右排列下去,若组件个数大于一行的显示时,自动转向下一行。不同构造函数为间距设置。
3.GridLayout:
比FlowLayout多了行和列的设置,即需要先设置GridLayout共有几行几列,就如同二维平面一般。而且会将所填进去的组件的大小设置为一样。
4.CardLayout:
如同有很多张叠在一起的卡片,一次只能看到一张,但可以任意抽取看其中任意一张。
5.GridBagLayout:
Java中最有弹性也是最复杂的一种版面管理器,不仅能设置组件摆设的位置,也能设置组件的大小。须配合GridBagConstraints才能达到设置的效果。
说明:
GridBagLayout中的各种设置都是通过GridBagConstraints实现的,设置好参数后,新建一个GridBagConstraints对象以便GridBagLayout使用,而GridBagConstraints得参数共有11个:
gridx与gridy:用来设置组件的位置。
gridwidth与gridheight:用来设置组件所占的单位长度和高度。
weightx与weighty:用来设置当前串口变大时,各组件跟着变大的比例,数字越大,表示组件能够达到更多的空间。
anchor:当组件空间大于组件本身时,要将组件置于何处,有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、SOUTH、SOUTHWEST、WEST、NORTHWEST可以选择。
fill:当组件所处的位置由剩下的空间时,设置此参数可以将剩余空间填满,所提供参数有NONE(默认值)、VERTICAL、HORIZONTAL、BOTH。
insets:设置组件之间彼此的间距,有四个参数,分别是上左下右。
ipadx与ipady:设置组件内的间距,默认值为0。
6.BoxLayout:
Swing提供的可以提供多样化的版面管理方式,类似前面的GridBagLayout,但比其更容易使用,且功能更强大。
有两种排列方式,水平和垂直,使用BoxLayout提供的两个常数X_AXIS、Y_AXIS来表示水平或垂直排列。注意:1.若组件不等高,系统会使所有的组件与最高的组件等高;2.若将组件都摆在同一行,系统不会因组件宽度大于Container的宽度而使其自动摆到下一行。
关于Box这个Container,必须使用默认的BoxLayout。Box有四种透明的组件,分别是Glue、Strut、Rigid、Filler,把透明组件插入到两个连在一起的组件时会有分开的效果:
Glue:插入在两个组件之间时,将两组件挤到最左与最右(或上下),透明的Glue会占满整个中间的空间。
Strut:若不想将组件挤到最旁边,可以设定需要的大小,但只能限定一维的大小,如水平或垂直。
Rigid:类似于Strut,但可以设置二维的限制。
Filler:是Box的Inner class,功能与Rigid类似,但Filler可以指定最大,较佳,最小的长宽大小。
本文介绍了Swing中的版面结构及版面管理器,包括Swing组件的层级关系、不同的容器功能,以及BorderLayout、FlowLayout等多种版面管理器的特性和使用方法。
4991

被折叠的 条评论
为什么被折叠?



