LayoutManager布局管理器



LayoutManager布局管理器.

布局管理器,负责管理、安排容器内的所有组件
java为实现跨平台的特性并且获得动态的布局效果,提出布局管理器的概念
排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化
不同的布局管理器使用不同的算法和策略,容器可以通过选择不同的布局管理器来决定布局
布局管理器主要包括:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout

FlowLayout是Panel、Applet的缺省布局管理器
从上到下、从左到右进行放置组件,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。

构造方法主要有下面几种:
FlowLayout(FlowLayout.RIGHT,20,40);
/*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是像素。*/
FlowLayout(FlowLayout.LEFT);//居左对齐,横向间隔和纵向间隔都是缺省值5个像素
FlaoLayout();//缺省的对齐方式是居中对齐,横向间隔和纵向间隔都是缺省值5个像素

当容器的大小发生变化时,用FlowLayout管理的组件会发生变化:组件的大小不变,但是相对位置会发生变化。

BorderLayout
是Window、Frame、和Dialog的缺省布局管理器
把容器分成5个区域:North、South、East、West和Center,每个区域只能放置一个组件

在使用BorderLayout的时候,如果容器大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化
如果容器变高了,则North、South区域不变,West、Center、East区域变高
如果容器变宽了,West、East区域不变,North、Center、South区域变宽
不一定所有的区域都有组件
如果四周的区域(West、East、North、South区域)没有组件,则由Center区域补充
如果Center区域没有组件,则保持空白

GridLayout
使容器中各个组件呈网格状布局,平局占据容器的空间。
CardLayout
能够帮助用户处理两个以至更多的成员共享同一个显示空间
把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面
牌布局管理器(CardLayout)就像一副叠得整齐的扑克牌,有54张牌,但是只能看见最上面的一张牌,每一张牌就相当于牌布局管理器中的每一层。

容器的嵌套
在复杂的图形用户界面设计中,为了使布局更加易于管理,具有简洁的整体风格,一个包含了多个组件的容器本身也可以作为一个组件加到另一个容器中去,容器中再添加容器。

Frame是一个顶级窗口,缺省布局管理器为BorderLayout
Panel无法单独显示,必须添加到某个容器中,缺省布局管理器为FlowLayout
当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器
可利用Panel使得BorderLayout中某个区域显示多个组件,达到设计复杂用户界面的目的。
如果采用无布局管理器setLayout(null),则必须使用setLocation()、setSize、setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不建议使用