§ 4.3布局管理器
本节的主要内容如下,
l 布局管理器的基本概念
l 边界布局管理器 ( BorderLayout)
l 顺序布局管理器 ( FlowLayout)
l 网格布局管理器 ( GridLayout)
l 网格包布局管理器 ( GridBagLayout)
l 盒式布局管理器 ( BoxLayout)
l 卡片布局管理器 ( CardLayout)
l 手工布局
任务
前面通过使用 Java的 GUI界面控件为 HNS软件学院计算器软件
提供了友好的操作人机界面 。 而一个好的图形操作界面不
仅仅要有完成相应操作的界面控件, 而且对这些界面控件
的布局也是非常重要的 。 而在 Java中主要是通过功能强大,
简便的布局管理器来实现对界面控件的管理, 因此, 为进
一步提高计算器的操作界面的友好性, 请您使用 Java中常用
的布局管理器对计算器的操作界面中的控件进行管理 。 您
的主要任务如下,
1,运用布局管理器对现有的计算器操作界面的控件进行布局
设置;
2,对新增加的计算功能进行布局设置, 如需要新增幂函数计
算, 对数函数计算等按钮的布局设置 。
4.3.1 布局管理器概述
GUI布局管理是指将加入到容器( Container)
的组件按照一定的顺序和规则放置,使得 GUI
界面更适于用户的操作的一系列配置管理工作。
容器只负责将组件放入其中,而不负责对这件
组件放置的位置和组件尺寸大小进行设置。对
于这些布局的管理交由专门的布局管理器来完
成。
4.3.1 布局管理器概述
在 Java中布局管理器是通过实现一个 LayoutManager的接口,来确保各种类型的
布局管理器具有统一的使用方法。它们之间的关系如下图所示,这些布局管理
器主要通过实接口中的 preferredLayoutSize ()和 layoutContainer()两个成员函数来
设置容器中的组件尺寸和位置。
B o r d e r L a y o u t
+ m i n i m u m L a y o u t S i z e ( )
+ p r e f e r r e d L a y o u t S i z e ( )
+ l a y o u t C o n t a i n e r ( )
< < 接 口 > >
L a y o u t M a n a g e r
F l o w L a y o u t
G r i d L a y o u t B o x L a y o u t
… …
4.3.2 常用布局管理器
在 Java中,常用的布局管理器有:顺序布局( FlowLayout)、
边界布局( BorderLayout)、网格布局( GridLayout)、卡
片布局( CardLayout)、盒式布局( BoxLayout)。我们将
通过在窗体上放置一些按钮来研究这些布局管理器。
4.3.2 常用布局管理器
1.顺序布局管理器( FlowLayout)
顺序布局管理器( FlowLayout)是指将组件从左到右依次排
列在窗体上,当排满一行后后续的组件将被安排到下一行,
直到所有的组件安置完毕。也就是说它把容器看作一个行
集,好像平时在纸上写字一样,一行写完就换行。顺序布
局管理器是一种最基本的布局,是 JPanel和 JApplet的默认
布局方式。
4.3.2 常用布局管理器
示例 4.3.1 运用 FlowLayout布局管理器管理界面上
的六个按钮。
4.3.2 常用布局管理器
2,边界布局管理器 ( BorderLayout)
边界布局管理器( BorderLayout)它把容器分成五个区如下图所示,分为:顶
部( NORTH,北区)、底部( SOUTH,南区)、右端( EAST,东区)、左端
( WEST,西区)和中央区( CENTER,中央区),其中位于中央区的组件是从中
央的位置开始填充,直到与其他组件或边框相遇为止。组件在加入时可以指定
其放置的位置。由于整个窗体被分成五个区,因此这种类型的布局管理器只能
为五个组件进行布局管理,其除的组件将不予显业。如果需要显示多个组件则
只能在相应的区域中加入组件容器。在加入组件时如不指定布局方位,默认为
向中央区加入。
4.3.2 常用布局管理器
示例 4.3.2 运用 BorderLayout布局管理器管理界面
上的五个按钮。
4.3.2 常用布局管理器
3,网格布局控制器 ( GridLayout)
GridLayout允许你构建一个放置组件的表格,在向表格里面
添加组件的时候,它们将按照从左到右、从上到下的顺序
加入,当加入的组件数多于设定的放置组件档数时它会自
动增加列数以满足需要。在构造器中要指定需要的行数和
列数,它们将均匀分布在窗体上。也就是说它会忽略所有
组件的最佳尺寸,所有单元的宽度是相同的,是根据单元
数对可用宽度进行平分而定的,其高度也是如此。
4.3.2 常用布局管理器
示例 4.3.3 运用 GridLayout创建一个三行三列按钮
的窗体。
4.3.2 常用布局管理器
4,网格包布局管理器 ( GridBagLayout)
GridBagLayout是 Java提供的最灵活, 最复杂的布局管理器 。 它类似于网格布局,
将窗体分隔成行列形式的网格 。 而且可以灵活地将组件放置在窗体中的任何栏
中, 也允许组件放置时跨越多行或列, 如下图所示 。 图中所显示的窗体在
GridBagLayout的布局管理下, 按钮 Button1占据了第 0行 0列的组件栏, Button2
占据了第 0行第 1列的组件栏, Button4占据第 0行第 2列的组件栏, Button4则占
据了第 1行的所有组件栏, Button占据了第 2行的第 1列和第 2列 。 从图中组件的
尺寸来看, 可知 GridBagLayout允许各个栏组件尺寸是可以自定义的, 而不是均
匀分配的 。
4.3.2 常用布局管理器
示例 4.3.4 请使用 GridBagLayout布局管理设计一
个如下图所示的窗体。
网 格 包 布 局 管 理 器 示 例
网 格 包 布 局 管 理 器 示 例
文 本 框
按 钮 1
按 钮 2 按 钮 3
组 合 框
单 行 文 本 框
4.3.2 常用布局管理器
5,盒式布局管理器 ( BoxLayout)
BoxLayout布局管理器是一种只允许沿组件容器的 x轴 ( 从左到右的水平
方向 ) 或 y轴 ( 从上到下的垂直方向 ) 方向布置 GUI组件的布局管理器 。
采用这种布局管理器的 GUI组件容器在伸缩时 GUI组件是不会跟随变化的 。
通常在创建该种布局管理器时指定其布局方向, 水平方向用 X_AXIS表示,
垂直方向用 Y_AXIS表示, 即通过该布局管理器的构造函数来设定 。
BoxLayout的构造器与其它布局管理器有所不同, 需要将 GUI组件容器对
象作为第一个参数, 而将布局方向作为第二个参数提供给构造器 。
4.3.2 常用布局管理器
示例 4.3.5 请使用 BoxLayout布局管理器对三个按
钮进行布局。
4.3.2 常用布局管理器
6,卡片布局管理器 ( CardLayout)
CardLayout布局管理器能够帮助用户处理两个以上的成员共
享同一显示空间, 它把容器分成许多层, 每层的显示空间
占据整个容器的大小, 但是每层只允许放置一个组件, 当
然每层都可以利用 JPanel来实现复杂的用户界面 。 卡片布
局管理器 ( CardLayout) 就如同一副叠得整整齐齐的卡片
一样, 你只能看见最上面的一张卡片, 每一张卡片就相当
于卡片布局管理器中的每一层 。
4.3.2 常用布局管理器
示例 4.3.6请使用 CardLayout布局管理器实现下图
所示的窗体布局管理。
4.3.2 常用布局管理器
7,手工布局
除了可以使用各种布局管理器来实现窗体界面的布局管理, 在 Java中同
样也允许程序员不使用布局管理器, 而是直接指定各个组件的位置, 即
手工布局 。 在对组件进行布局设置时需要指出组件的位置和尺寸大小 。
可通过如下两个步骤来实现,
(1) 使用 setLayout(null)方法把容器的布局管理设置为空 ;
(2) 为每个组件调用 setBounds(int x,int y,int width,int height)或者
reshape()方法, 其中用 x和 y指定组件所在位置, 而用 width和 height指
定组件的尺寸 。
4.3.2 常用布局管理器
示例 4.3.7 请使用手工布局向窗体中加入三个按钮。
任务解决
通过对各种布局管理器的学习,使我们学会了使用
布局管理器来管理面板容器中的组件的布局方法。
同时也初步具备了解决任务 1的能力。
小结
在 Java的 GUI系统设计中, 通常使用布局管理器来管理组件容器中的布局,
即控制容器中的组件的位置和尺寸大小 。 在 Java的 awt包中提供多种功
能强大, 灵活的布局管理器, 这些布局管理器通过实现 LayoutManager
接口来提供统一的接口 。 常用的有,
(1) 顺序布局管理器 ( FlowLayout)
(2) 边界布局管理器 ( BorderLayout)
(3) 网格布局控制器 ( GridLayout)
(4) 网格包布局管理器 ( GridBagLayout)
(5) 盒式布局管理器 ( BoxLayout)
(6) 卡片布局管理器 ( CardLayout)
(7) 手工布局