AWT中常用的布局管理器有如下几个:FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout,Swing还提供了一个BoxLayout.5 s8 x1 A+ w5 ~1 F: }) h E
3 y+ W) `2 o/ N9 q- ~* T8 X
FlowLayout从左向右排列所有组件,遇到边界就会折回下一行从新开始。它有三个构造器FlowLayout(),FlowLayout(int align)和 FlowLayout(int align, int hgap, int vgap),其中的hgap和vgap代表水平间距和垂直间距,align指的是组件的排列方向(从左向右,从右向左,从中间向两边),我们可以使用FlowLayout的静态常量来设置这个参数:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT.
# X4 l+ a, Y$ g) q8 J& Q7 D& ^# H* o ! \7 |& l$ h8 b+ n
BorderLayout将容器分为EAST,SOUTH,WEST,NORTH,CENTER五个区域,如下图所示:
4 n& C G$ b3 @) g
$ k7 e' x) \7 H! j 2 E" P" @$ v0 ^7 Z5 e
我们在向使用此布局管理器的容器中添加组件时,需要制定添加到的区域,否则就默认添加到中间区域里,而当我们向一个区域添加多个组件时,后放入的组件会覆盖前面的组件。BorderLayout有两个构造器,BorderLayout()和BorderLayout(int hgap,int vgap),hgap和vgap代表的水平间距和垂直间距。我们在指定组件添加到的区域时,可以使用它的静态常量:BorderLayout.EAST, BorderLayout.WEST, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER.例如: R& f: Z% D& K% U6 J6 V% o
" g$ w; E# L; b4 i; ~/ a Frame f = new Frame();
. N6 y; F/ d$ ?$ R% m0 a- ^
3 y, a; a0 G$ v- }, d f.setLayout(new BorderLayout(5,5));
# k$ D3 y+ e* d! o
* G" M! F, W( }& Q0 Y5 U2 J3 h8 _ f.add(new Button("南"),SOUTH);//将一个按钮添加到南的位置
( p H- ~/ F6 i
2 s8 [/ U$ f9 z1 T5 u" \) O* n/ H BorderLayout最多只能放5个组件,但是实际上我们可以先在Panel中添加多个组件,再将Panel添加到BorderLayout布局管理器中,因此我们实际可以放的组件要远远超过5个。
8 G' b( _- \- r/ b5 M 1 a+ f1 f% r- B2 r
GridLayout将容器分割成大小相同的网格,我们在添加组件时将默认从左到右从上到下,将组件依次添加到每个网格中,而每个组件的大小也就由其所添加到的网格的大小所决定。GridLayout同样也有两个构造器,GridLayout(int rows,int cols)和GridLayout(int rows ,int cols,int hgap,int vgap),使用GridLayout的典型例子就是计算器的窗口:$ l# f' m* T) K" b2 U
8 S' V" z" T6 i0 ?3 {3 `7 d8 O% g import java.awt.*;# z5 T' U! }5 o$ c9 u# M
3 D8 f- H2 ~. w5 I7 |9 t; { public class calculator0 c* {3 D, }/ n5 f
* W& b& Q2 v: Y( K* K2 x
{
* b/ g& l- D+ L* D; r 8 R) t2 V4 N o
public static void main(String[] args)
: _& x+ X6 l" m: _- h( D
) C1 A; p% s" Z% C/ s {+ G/ c3 R0 H. x9 p) H7 o- S; _( W3 C
$ d' j5 L/ k& \& S/ `- [1 h! x
Frame f = new Frame("计算器");
+ M( R; z, c+ p B2 K' N $ p }8 M5 l0 g/ j7 v7 m6 h7 R
Panel p1 = new Panel(); |