首页 理论教育 学习FlowLayout和BorderLayout布局

学习FlowLayout和BorderLayout布局

时间:2023-11-16 理论教育 版权反馈
【摘要】:下面通过添加按钮的案例来学习一下FlowLayout 布局管理器的用法,如文件9-2所示。从图9.5 可以看出BorderLayout 边界布局管理器,它将容器划分为五个区域,其中箭头是指改变容器大小时,各个区域需要改变的方向。JFrame、Jdialog 默认布局管理器就是BorderLayout。与FlowLayout 不同的是,放置在GridLayout 布局管理器中的组件将自动占据网格的整个区域。

学习FlowLayout和BorderLayout布局

9.1 节中提到过,组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。在java.awt 包中提供了五种布局管理器,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)和CardLayout(卡片布局管理器)。每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器来自动进行组件的布局管理。例如把一个 Frame 窗体的布局管理器设置为FlowLayout,代码如下所示:

1. FlowLayout

FlowLayout 布局是按照组件的添加次序将按钮组件(当然也可以是别的组件)从左到右放置在容器中。当到达容器的边界时,组件将放置到下一行中。FlowLayout 可以以左对齐、居中对齐、以右对齐的方式排列组件。

流式布局管理器(FlowLayout)是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左到右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。FlowLayout 对象有三个构造方法,如表9-1 所示。

表9-1 FlowLayout 对象的构造方法

表9-1 列出了FlowLayout 的三个构造方法。参数align 决定组件在每行中相对于容器边界的对齐方式,可以使用该类中提供的常量作为参数传递给构造方法,其中FlowLayout.LEFT 用于表示左对齐、FlowLayout.RIGHT 用于表示右对齐、FlowLayout. CENTER 用于表示居中对齐。参数hgap 和参数vgap 分别设定组件之间的水平和垂直间隙,可以填入一个任意数值。

【例9.2】下面通过添加按钮的案例来学习一下FlowLayout 布局管理器的用法,如文件9-2所示。

文件9-2 Example02.java

执行结果

图9.4 【例9.2】执行结果

注意事项:

(1)不限制它所管理的组件大小,允许它们有最佳大小。

(2)当容器窗缩放时,组件的位置可能变化,但组件的大小不变。

(3)默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式。

2. BorderLayout

BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以被放置在这五个区域中的任意一个。BorderLayout 布局的效果如图9.5 所示。

从图9.5 可以看出BorderLayout 边界布局管理器,它将容器划分为五个区域,其中箭头是指改变容器大小时,各个区域需要改变的方向。也就是说,在改变容器时NORTH 和SOUTH区域高度不变长度调整,WEST 和EAST 区域宽度不变高度调整,CENTER 会相应进行调整。

当向BorderLayout 布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。其中参数comp 表示要添加的组件,constraints 指定将组件添加到布局中的方式和位置的对象,它是一个Object 类型,在传参时可以使用BorderLayout 类提供的5 个常量,它们分别是EAST、SOUTH、WEST、NORTH 和CENTER。边界布局(BorderLayout)将容器简单地划分为东南西北中5 个区域,其中中间区域最大。JFrame 窗体、JDialog 对话框组件默认布局方法。

图9.5 BorderLayout 布局的效果

【例9.3】下面通过案例来演示一下BorderLayout 布局管理器对组件布局的效果,如文件9-3 所示。

文件9-3 Example03.java

执行结果

图9.6 【例9.3】执行结果

边界布局BorderLayout 的注意事项:

(1)不是五个部分都必须添加。

(2)中部组件会自动调节大小。

(3)JFrame、Jdialog 默认布局管理器就是BorderLayout。

3. GridLayout

GridLayout(网格布局管理器)使用纵横线将容器分成n 行m 列大小相等的网格,每个网格中放置一个组件。添加到容器中的组件首先放置在第1 行第1 列(左上角)的网格中,然后在第1 行的网格中从左向右依次放置其他组件,行满后,继续在下一行中从左到右放置组件。与FlowLayout 不同的是,放置在GridLayout 布局管理器中的组件将自动占据网格的整个区域。

GridLayout 的构造方法如表9-2 所示。

表9-2 GridLayout 的构造方法

表9-2 列出了GridLayout 的三个构造方法。其中,参数rows 代表行数,cols 代表列数,hgap 和vgap 规定水平和垂直方向的间隙。水平间隙指的是网格之间的水平距离,垂直间隙指的是网格之间的垂直距离。

GridLayout 布局,听其名而知其意,它将容器分割成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他的组件,当占满该行的所有网格后,接着继续在下一行从左到右放置组件。

【例9.4】下面通过一个案例演示GridLayout 布局的用法,如文件9-4 所示。

文件9-4 Example04.java

执行结果

图9.7 【例9.4】执行结果

注意事项:

(1)组件的相对位置不随容器的缩放而变化,但大小会变化。

(2)所有组件的大小相同。(www.xing528.com)

(3)可以通过GridLayout(int rows、int cols、int hgap、int vgap)来指定网格的行/列,水平间隙/垂直间隙。

参数说明:rows:行数;cols:列数;hgap:垂直间隙;vgap:水平间隙。

4. GridBagLayout

GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout 布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。

使用GridBagLayout 布局管理器的步骤如下:

(1)创建GridbagLayout 布局管理器,并使容器采用该布局管理器。

(2)创建GridBagContraints 对象(布局约束条件),并设置该对象的相关属性。

(3)调用GridBagLayout 对象的setConstraints()方法,建立GridBagConstraints 对象和受控组件之间的关联。

(4)向容器中添加组件。

GridBagConstraints 对象可以重复使用,只需要改变它的属性即可。如果要向容器中添加多个组件,则重复(2)、(3)、(4)步骤。

从上面的步骤可以看出,使用GridBagLayout 布局管理器的关键在于GridBagConstraints对象,它才是控制容器中每个组件布局的核心类,在GridBagConstraints 类中有很多表示约束的属性,下面对GridBagConstraints 类的一些常用属性进行介绍,如表9-3 所示。

表9-3 GridBagConstraints 类的常用属性

续表

表9-4 中列出了GridBagConstraints 的常用属性。其中,gridx 和gridy 用于设置组件左上角所在网格的横向和纵向索引,gridwidth 和gridheight 用于设置组件横向、纵向跨越几个网格,fill 用于设置是否及如何改变组件大小,weightx 和weighty 用于设置组件在容器中的水平方向和垂直方向的权重

需要注意的是,如果希望组件的大小随着容器的增大而增大,必须同时设置GridBagConstraints 对象的fill 属性和weightx、weighty 属性。

【例9.5】下面通过一个案例来演示GridBagLayout 的用法,如文件9-5 所示。

文件9-5 Example05.java

执行结果

图9.8 【例9.5】执行结果

5. CardLayout

在操作程序时,经常会遇到通过选项卡按钮来切换程序中的界面,这些界面就相当于一张张卡片,而管理这些卡片的布局管理器就是卡片布局管理器(CardLayout)。卡片布局管理器将界面看作一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。卡片布局管理器(CardLayout)将每一个组件视为一张卡片,一次只能看到一张卡片,容器充当卡片的堆栈,容器第一次显示的是第一次添加的组件。构造方法有以下几种。

public CardLayout():创建一个新卡片的布局,水平间距和垂直间距都是0。

public CardLayout(int hgap,intvgap):创建一个具有指定水平间距和垂直间距的新卡片布局。在CardLayout 布局管理中经常会用到下面几个方法,如表9-4 所示。

表9-4 CardLayout 类的常用方法

【例9.6】下面通过一个案例来演示这些方法的使用,如文件9-6 所示。

文件9-6 Example06.java

执行结果

图9.9 【例9.6】执行结果

当一个容器被创建后,它们都会有一个默认的布局管理器。Window、Frame 和Dialog 的默认布局管理器是BorderLayout,Panel 的默认布局管理器是FlowLayout。如果不希望通过布局管理器来对容器进行布局,也可以调用容器的setLayout(null)方法,将布局管理器取消。在这种情况下,程序必须调用容器中每个组件的setSize()和setLocation()方法或者是setBounds()方法(这个方法接收四个参数,分别是左上角的x、y 坐标和组件的长、宽)来为这些组件在容器中定位

【例9.7】下面通过一个案例来演示不使用布局管理器对组件进行布局,如文件9-7 所示。

文件9-7 Example07.java

执行结果

图9.10 【例9.7】执行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈