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

暂时略。