Swing学习笔记2---版面结构

本文介绍了Swing中的版面结构及版面管理器,包括Swing组件的层级关系、不同的容器功能,以及BorderLayout、FlowLayout等多种版面管理器的特性和使用方法。

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可以指定最大,较佳,最小的长宽大小。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值