设计图形界面-4.布局管理器

发布于:2021-06-11 10:43:31

第13章 Swing程序设计 ——常用布局管理器

1

本单元内容
复*组件JLabel JButton JToggleButton、JCheckBox 布局管理器 常用布局管理器 绝对布局 null 流布局 FlowLayout 边界布局 BorderLayout 网格布局 GridLayout

2

LayoutManager 布局管理器接口
Java为了实现跨*台的特性并且获得动态的布局效果,将容器 内的所有组件的大小、位置、顺序、间隔等交给“布局管理器” 负责管理。 通过容器组件的setLayout()方法可以设定容器中组件排放策略, 如:

setLayout(new BorderLayout());//设置容器新的布 局 setLayout(null); //取消容器的布局,采用手工设置

3

布局管理器
所有布局都实现LayoutManager接口
FlowLayout( FlowLayout(流布局 ) BorderLayout (边界布局 ) GridLayout(网格布局) GridLayout(网格布局)

组件从左到右,从上到下, 组件从左到右,从上到下,一个挨一个放到 容器中,JPanel默认 容器中,JPanel默认
按北、 按北、东、西、南和中安排组件,JFrame、 南和中安排组件,JFrame、 JDialog默认 JDialog默认 把容器分成同样大小的网格,每个网格单元包含 把容器分成同样大小的网格, 一个组件或容器, 一个组件或容器,可以设置组件之间的间隙和网 格行和列数。 格行和列数。 需要用setLocation setBounds等方法来手 setLocation和 空,需要用setLocation和setBounds等方法来手 动设定 组件的一撸卡片组, 组件的一撸卡片组,每张只能显示和处理一个容 器 也是用网格作为构件单元, 也是用网格作为构件单元,不用显式的规定网格 的行列数, 的行列数,比较复杂和有用

Null(无布局) Null(无布局)

CardLayout(卡式布局) CardLayout(卡式布局) 卡式布局

GridBagLayout(网袋布局) GridBagLayout(网袋布局)

4

FlowLayout(流布局管理器)
FlowLayout 是JPanel缺省布局管理器。 放置是从上到下、从左到右进行放置,如果容器足够宽,第一个 组件先添加到容器中第一行的最左边,后续的组件依次添加到上 一个组件的右边,如果当前行已放置不下该组件,则放置到下一 行的最左边。 当容器的大小发生变化时,用FlowLayout管理的组件会发生变 化,其变化规律是:组件的大小不变,但是相对位置会发生变化。

5

FlowLayout
构造方法主要下面几种: FlowLayout(FlowLayout.RIGHT,20,40); /*第一个参数表示组件的对齐方式,指组件在这一行中的位置是 居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间 隔,第三个参数是组件之间的纵向间隔,单位是象素。*/ FlowLayout(FlowLayout.LEFT); //居左对齐,横向间隔和纵向间隔都是缺省值5个象素 FlowLayout(); //缺省的对齐方式居中对齐,横向间隔和纵向间隔都 是缺省值5个象素
例: JFrame jf = new JFrame(); f.setLayout(new FlowLayout()); Container c=this.getContentPane(); c.add(new Button("button1")); c.add(new Button(" button2")); c.add(new Button(" button3"));

6

举例:FlowLayout 常用方法
int getHgap()//返回组件的水*间隔 void setHgap(int hgap) ()//设定组件的水*间隔 int getVgap() //返回组件的垂直间隔 void setVgap(int hgap) //设定组件的垂直间隔 int getAlignment() //返回组件的对齐方式 void setAlignment(int align) //设定组件的对齐方式

7

课堂练*

8

BorderLayout
JFrame和JDialog的缺省布局管理器 的缺省布局管理器。 BorderLayout 是JFrame和JDialog的缺省布局管理器。 BorderLayout布局管理器把容器分成 个区域:North,South, 布局管理器把容器分成5 BorderLayout布局管理器把容器分成5个区域:North,South, East,West和Center,每个区域只能放置一个组件。 East,West和Center,每个区域只能放置一个组件。 f.setLayout(new BorderLayout()); f.add(new Button("North"), BorderLayout.NORTH); //第一个参数表示把按钮添加到容器的North区域 第一个参数表示把按钮添加到容器的North //第一个参数表示把按钮添加到容器的North区域 在使用BorderLayout的时候,如果容器的大小发生变化, BorderLayout的时候 在使用BorderLayout的时候,如果容器的大小发生变化,其变化 规律为:组件的相对位置不变,大小发生变化。 规律为:组件的相对位置不变,大小发生变化。

9

BorderLayout
构造方法
BorderLayout()//建立一个BorderLayout对象,组件间隔默认,水 *垂直为0。 BorderLayout(int hgap,int vgap) //建立一个BorderLayout对象, 组件设定水*垂直间隔。

常用方法
int getHgap()//返回组件水*间隔 void setHgap(int hgap)//设定组件水*间隔 int getVgap()//返回组件垂直间隔 void setVgap(int vgap)//设定组件垂直间隔

10

课堂练*
North West Center South East

11

GridLayout
使容器中各个组件呈网格状布局,*均占据容器的空间, 使容器中各个组件呈网格状布局,*均占据容器的空间,将容器空间划 分成n m的大小相同的小格 每格区间放一个组件,按序存放(从左至右, 的大小相同的小格, 分成n x m的大小相同的小格,每格区间放一个组件,按序存放(从左至右, 从上至下) 从上至下)。 JFrame jf = new JFrame(“GridLayout”); //容器*均分成 容器*均分成2 jf.setLayout(new GridLayout(2,3)); //容器*均分成2行3列 共6格 Container c=jf.getContentPane(); //添加到第一行的第一格 c.add(new JButton("1")); //添加到第一行的第一格 //添加到第一行的下一格 c.add(new JButton("2")); //添加到第一行的下一格 ... //添加到第二行的第三格 c.add(new JButton("6")); //添加到第二行的第三格

12

GridLayout
构造方法
GridLayout()//建立一个 建立一个GridLayout对象,在一行中排列组件,组件之间的默 对象, 建立一个 对象 在一行中排列组件, 认间隔为0 认间隔为 GridLayout(int rows,int cols)//建立一个 建立一个GridLayout对象,将容器分为 对象, 建立一个 对象 rows行,cols列,组件之间的水*和垂直间隔为 行 列 组件之间的水*和垂直间隔为0 GridLayout(int rows,int cols,int hgap,int vgap)//建立一个 建立一个GridLayout 建立一个 对象,将容器分为rows行,cols列,设定组件之间的水*和垂直间隔 对象,将容器分为 行 列

常用方法
int getColumns() //返回设定列数 返回设定列数 void setColumns(int cols) //设定列数 设定列数 int getRows() //返回设定行数 返回设定行数 void setRows(int rows) //设定行数 设定行数 int getHgaps() //返回设定水*间隔 返回设定水*间隔 void setHgaps(int hgap) //设定水*间隔 设定水*间隔 int getVgap()//返回设定垂直间隔 返回设定垂直间隔 void setVgap(int vgap) //设定垂直间隔 设定垂直间隔

13

null
称为无布局管理器。 可以随心所欲安排容器,但是跨*台时,可能发生变 化。

14

布局管理器-小结
小 结: 1.JFrame是一个顶级窗口。JFrame的缺省布局管理器为BorderLayout。 2.JPanel 无法单独显示,必须添加到某个容器中。 JPanel 的缺省布局 管理器为FlowLayout。 setBounds(x,y,weigh 3.当把JPanel 作为一个组件添加到某个容器中后,该JPanel 仍然可以有 ,heigh) 自己的布局管理器。因此,可以利用JPanel 使得BorderLayout 中某个区 设定窗体的位置和大小, 域显示多个组件,达到设计复杂用户界面的目的 其中x,y为左上角的坐 。 4.如果采用无布局管理器 setLayout(null),则必须使用 标,weight和height为 weight height setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置, 宽度和高度 此方法会导致*台相关,不鼓励使用。

15

课堂练*——按钮图形设计
演示复选按钮,单选按钮和按钮组的用法。

16

课后作业
自学 卡式布局 网袋布局

17


相关推荐

最新更新

猜你喜欢