Java的awt包中定义了很多GUI组件,如按钮、标签、文本框等,这些组件一般放在Frame、Panel容器中进行管理。容器中的组件的大小、位置、排列方式等属性统称为容器的布局。在java中提供了布局管理器对容器中的布局进行管理。常用的布局管理器及其显示特性如下表:
所属类包 | 布局管理器名称 | 显示效果 |
Java.awt | FlowLayout | 组件按照加入的先后顺序逐行摆放,行内从左到右,一行排满后换行,可以设定组件的对齐方式、行间距、列间距 |
Java.awt | BorderLayout | 容器被划分为东、西、南、北、中五个区域,每个区域只能放一个组件 |
Java.awt | GridLayout | 容器被划分为M×N的矩形网格区域,组件按照加入的顺序,行内从左到右,行间从上到下的顺序排列,每个区域只能放一个组件 |
Java.awt | CardLayout | 如同一叠卡片,每个卡片对应一个组件,每次只有最上面的一个组件可见,可以人为设定显示那个组件 |
Java.awt | GridBagLayout | GridLayout的的升级版,组件仍按照行、列放置,但每个组件可以占据多个网格 |
每个容器都有一个默认的布局管理器,Window、Frame、Dialog的默认布局管理为BorderLayout,Panel、Applet默认为FlowLayout布局,Component、Contain默认没有布局管理器。
容器的布局管理器必须在添加任何组件之前添加,可以使用容器类的setLayout()方法。在为容器设置好布局管理器之后,向容器添加的所有组件的位置都将由设定的布局管理器进行管理。
FlowLayout 流布局
FlowLayout是最简单的布局管理器,容器类可以使Frame框架、或者Panel面板。组件按照添加的顺序,从左到右排列,一行排满以后,重新开始下一行。用户无法手动换行。
FlowLayout中定义的对齐方式:
- Flowlayout.LEFT 左对齐
- Flowlayout.RIGHT 右对齐
- Flowlayout.CENTER 居中
- Flowlayout.LEADING 父容器依赖左对齐
- Flowlayout.TRAILING 父容器依赖右对齐
组件间的对齐方式默认是居中对齐,也可以在构造方法中设置不同的组件行间距、列间距
构造方法:
- FlowLayout()
- FlowLayout(int align) 对齐方式
- FlowLayout(int align, int hgap, int vgap) 对齐方式、横向间距、纵向间距
BorderLayout 分区布局管理器
分区布局管理器把整个容器划分为东、西、南、北、中五个区域,组件只能添加到指定的区域中。如果不指定区域,默认添加到Center区域。一个区域只能添加一个组件,如果往一个区域中添加多个组件,则先前添加的组件会被遗弃。如果确实想在一个区域添加多个组件,则可以将组件添加到一个容器中,然后把该容器添加到该区域。组件的尺寸被容器强行控制,与其所在的区域的尺寸相同。当容器的尺寸发生变化时,BoradLayout各个区域的尺寸也会变化,原则为:
- 北、南只能水平方向缩放
- 东、西只能在垂直方向缩放
- 中间区域在水平、垂直两个方向都可以缩放
BorderLayout中区域相关的常量:
- BorderLayout.NORTH 北
- BorderLayout.SOUTH 南
- BorderLayout.EAST 东
- BorderLayout.WEST 西
- BorderLayout.Center 中
GridLayout 网格布局
网格布局将容器划分为规则的M×N个矩形区域,每个网格大小相等。组件加入到每个矩形的单元格中,按其加入顺序从左到右填满一行后换行。组件的大小被网格布局强行控制,受单元格的大小限制。当容器的尺寸变化时,组件的相对位置保持不变,但大小随容器自动变化。当组件个数超过网格个数时,布局管理器自动增加网格个数,原则是保持行数不变。
构造方法:
- GridLayout(int m, int n)网格的行数、列数
- GridLayout(int m, int n, int hgap, int vgap)网格的行数、列数、横向间距、纵向间距
CardLayout 卡片布局
CardLayout将多个组件在同一个容器区域内交替显示,相当于多张卡片叠在一起,只有最上面的组件可见。可以按照名称指定要显示的一个组件,也可以按照先后顺序依次显示,也可以直接定位到第一个或最后一个组件进行显示。
构造方法:
- CardLayout()
常用方法:
- cardLayout.First() 显示第一个组件
- cardLayout.Last() 显示最后一个组件
- cardLayout.next() 显示下一个组件
- cardLayout.previous() 显示上一个组件
- cardLayout.show(Container parent,String name) 显示名称为name的组件(可以在添加组件到容器时,向容器注册name)
GridBagLayout
暂时略。