您的位置:首页 > 编程语言 > Java开发

Java布局管理器(二)之FlowLayout(流布局管理)和BorderLayout(边框布局管理)

2013-07-12 01:18 211 查看
标准布局管理器
Java平台提供了多种布局管理器,例如java.awt.FlowLayout、java.awt.Border.Layout、java.awt.GridLayout、java.awt.CardLayout、java.awt.GridBagLayout、javax.swing.BoxLayout、javax.swing.SpringLayout、java.swing.OverlayLayout、java.swing.ScrollPaneLayout、java.swing.ViewportLayout等等,是不是感觉这些方法太繁琐老,挺难记的吧。不过方法多了也好,我们可以根据自己的实际情况在这个大范围的选取符合我们要求的一个最好的,虽算不上百里挑一,但也增加了界面设计富有灵活性,从而使界面设计不必拘泥于简单的布局,可谓博采众长老。每种组建都能代表某一种或某一类界面风格,适用于相应具体的场合,也算是各有特色吧。等一下再在下面一一详尽介绍之。下面再谈谈布局管理器的一些助手类,这些类是在java.awt包中预定义的,例如GridBagLayout的限制类GridBagConstraints、BoxLayout与OverlayLayout管理器所用的SizeRequirements类、以及与SpringLayout管理器相关联的Spring与SpringLayout.Constraints类等等,也有n多种,原因也不再赘述老,下面进入正题,9种布局管理器(前5个是awt管理器,后4个是swing管理器)。

(一)FlowLayout(流布局管理)

是JPanel和Applet默认使用的布局管理器。

FlowLayout以Component的getComponentOrientation()方法所定义的顺序,按行自左至右向容器添加组件。有时候,我们向容器中添加的组件比较多时,也就是说当在一行中不能适应这么多的组件,它会另起一行,开始新的一行组件排列,如果组件还是很多以至于当前容器没有足够的空间,我们就不会看到所有的组件。不过不用着急,我们可以适当地调整容器的大小,如果窗体的大小是可变的拉一下窗体也行,其中的组件会依据容器的新尺寸重新定位,是不是很富有动态。

在FlowLayout管理的容器中的组件会给予其合适的尺寸。这种布局管理非常简单,他并不强行设定组件的大小,而是希望组件拥有他们自身希望的尺寸。这种方法可以保留我们想要设定的组件样式,而不随着程序界面的改变而随意更改。8过可想而知,当各种各样的组件很多时,它也会带来另外的烦恼,即众口难调。即如果组件的大小不一,并且有时候组建的数目比较多它的布局会显得灰常之凌乱。综合其优缺点,更多的时候我们是可以扬长避短的嘛。废话不多说老,谈谈如何使用这种控件的吧。

构造方法有下列3种:

1)FlowLayout():创建每行组件居中对齐、组件间距为5个像素单位(这个是默认值)。

2)FlowLayout(int align):创建指定每行的对齐方式、组件间距为5个像素单位。

3)FlowLayout(int align, int hgap, int vgap)

拥有了这些方法,如果一行之中的组件不够填满一行,我们如何布置这些组件的位置呢?就是采用上述的对齐方式参数align,其取值表示组件的对齐方式:CENTER、LEFT、RIGHT、TRAILING、LEADING,如果align为空则表示其使用默认值居中对齐。关于对齐方式,我们常见的就是左、中、右,但上面怎么有5种呢?原来对于通常的由左到右的方向,LEADING与LEFT是相同的,同样TRAILING与RIGHT也是相同的,所以就变成我们常见的3种了嘛。在看第三种方法,还有一对可选项hgap和vgap,使用者对可选项可以设定组件之间的水平距离和垂直距离,这种距离的衡量我们是以像素为单位。即我们可以以像素为组件之间的水平(hgap)与垂直(vgap)间隔。间隔默认为五像素,要是实际应用中控件的间距大于5个像素呢,那就用可选项hgap和vgap调整之。如果我们希望组件放置在另一个组件之上,这里是允许叠放的,那就指定负间隔即可完成。

(二)BorderLayout(边框布局管理)
是JFrame,JWindow,JDialog,JInternalFrame以及JApplet内容面板的默认布局管理器。它把管理的容器划分为上、下、左、右、中五个区域,分别对应North(北区),South(南区),West(西区),East(东区)和Center(中区),我们用哪个区,就在哪个区放入组件。如果在加入组件时没有声明加载的区域,那么默认的是中区,这个以便我们可以分区加载我们的组件时的对称性,就算是不偏不移吧,哈哈。

有时候根据应用的需求,我们并不需要指定容器的所有五个区域,也就是说为了使布局更加的合理,增加用户的体验度,5个区不一定全用了,那末会8会出现失衡的现象呢?答案是否定的,如果出现5个区不全用的话,对于北边区域的组件,它们会占据容器顶部的完整宽度,而南边的组件同样会占据容器底部的完整宽度,在高度方面北边或者南边区域的高度是所添加组件的合适高度。东边与西边区域也是类似的,它们的宽度是所包含组件的宽度,而高度则是容器在满足了北边与南边区域的高度需求后剩下的高度。不管有没有其他四个区的组件,在满足了它们的需求之后最后剩下的空间肯定归中间区域的组件所有老。
再说其构造方法,有如下两种可供选择:

1)BorderLayout():创建组件间无间距的布局对象,因为BorderLayout的默认间隔为零像素,这一点与FlowLayout不同,FlowLayout默认的是5个像素,这意味着采用BorderLayout布局的组件会紧临着其他组件放置。不过有的时候这么多组件无缝对接可能给人的感觉是非常拥挤的,要想克服这一难题请看后文:


2)BorderLayout(int hgap,int vgap):创建指定组件间距的布局对象。hgap和vgap指定东西南北中各分区的间距,使用者可以根据实际需求自行调整各区域的实际间距,使各组件若即若离,整体布局不是特别拥挤,不过这当然是就事论事了。

布局管理器构造好了,再讲讲如何向里面添加组件吧,辛辛苦苦盖了一所豪宅,住进切享享福才是在,哈哈。用add(component,index)方法向容器中添加组件,其中第二个参数指明组件位置,就是我们上边所说的东西南北,其取为:BorderLayout.North,BorderLayout.South,BorderLayout.East,BorderLayout.West,BorderLayout.Center。当向BorderLayout管理的容器添加组件时所用的约束是BorderLayout类的常量:

AFTER_LAST_LINE
AFTER_LINE_ENDS
BEFORE_FIRST_LINE
BEFORE_LINE_BEGINS
CENTER
EAST
LINE_END
LINE_START
NORTH
PAGE_END
PAGE_START
SOUTH
WEST
肿么楞么多,五个区域应该对应五个常量吧。这一点还可以追溯到FlowLayout管理器,除了上面说的那5个方向各自对应的5个常量,其他的常量用来处理当组件方向相反时的正确放置,或者是水平或者是垂直。对于通常的由左至右,由上到下的方向,通常的值集合如下:
AFTER_LAST_LINE, PAGE_END,SOUTH
AFTER_LINE_ENDS, LINE_END,EAST
BEFORE_FIRST_LINE,PAGE_START,NORTH
BEFORE_LINE_BEGINS,LINE_START, WEST
CENTER
使用BEFORE与AFTER常量,而不使用NORTH, SOUTH, EAST与WEST常量是推荐做法,尽管所有这些常量都被支持。
在考虑一点,上面所说的那5个区每个区只能放一个组件,多放了区域中只能最后一个组件可见,其他租价被遮盖。不过如果我们非要让一个空间有两个或两个以上组件那该肿么办?也有解决方法首先将其添加到不同的容器,然后再把这个容器添加到BorderLayout管理的容器中,可以层层嵌套,只要你的空间足够的话,哈哈,是不是很有意思。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: