Java中可以使用java.awt.Container类及其子类来显示组件 ,布局管理器(Layout Manager)负责管理容器中组件的布局 ,布局管理是决定容器中组件的大小和位置。要为容器分配一个布局管理器,需要创建管理器的实例并传给Container类中定义的setLayout方法,使用Container中定义的重载add()方法可以向容器中添加组件(Component),则该容器作为Component的父容器。调用add()方法后,容器会将组件添加到容器的列表中并调用布局管理器的addLayoutComponent()方法,使用指定的约束对象将组件添加到此容器的布局中。布局管理器在判断组件尺寸时需要考虑容器的尺寸,因此会调用组件的getPrefeffedSize()、getMinimumSize()和getMaxmumSize()方法,不过布局管理不会一一考虑这些方法的返回值,某些情况下,布局管理器会忽略这些值。每个容器都有几个插入值(inset)表示容器边上一圈保留像素数量,该区域不用于显示子组件,通常用这几个值描述容器的边框宽度(一般是四个:对应上下左右,不过有时还会保留额外的空间,例如JFrame和JDialog都在上边框中包含一个标题栏,可以设置相应的插入值来保留这块空间),布局管理器在计算容器的可用空间时,会从容器宽度中减去左右插入值,并从高度中减去上下插入值,另外布局管理器在排放子组件时会将组件放在容器插入区域的内侧,保证组件不会覆盖到容器边上的保留空间。
Java 核心类中包含的众多布局管理器提供了足够的灵活性,下面列出了Java中布局管理器类,大致上,这几个类的复杂程度从最简单到最复杂排列。
常用布局管理器 | 中文简称 | 常用组件的默认 |
CardLayout | 卡片布局 | |
FlowLayout | 流布局 | JPanel |
BorderLayout | 边框布局 | JFrame(内容窗格),JDialog(内容窗格),JApplet(内容窗格) |
GridLayout | 格子布局 | |
GridBagLayout | 网格组布局 | |
BoxLayout | 箱式布局 | Box |
使用布局管理器时,可考虑如下:
1.如何构造布局管理器实例
2.添加子组件时可以指定的约束
3.每个子组件的尺寸计算
4.每个子组件的位置计算
5.容器空间大于或者小于显示子组件所需空间的情况(如窗体放大或缩小)
6.布局管理器如何计算容器的getPrefeffedSize()、getMinimumSize()和getMaxmumSize()方法返回值
参考:1.Pro Java Programming(Second Edition)
2.Core Java I