第八章 面板与布局管理器 8 . 1 布局管理器 awt...

30
第第第 第第第第第第第第 8 . 1 第第第第第 AWT 第第第第第第第第第第第第第 第第第第第第第第第 第第第第第第第第第 一。 第 java 第第第第第第第第第第第FlowLayout GridLayout BorderLayout CardLayout

Upload: iden

Post on 27-Jan-2016

165 views

Category:

Documents


0 download

DESCRIPTION

第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有: FlowLayout GridLayout BorderLayout CardLayout. 1 、 FlowLayout (流布局管理器) 使用这种布局管理器,其 布局策略是容器中的组件按照加入的先后顺序从左到右排列。 当一行排满后会转到下一行显示,每一行中的组件都居中排列。 流布局管理器还有个 对齐参数 ,决定着每行的对齐: FlowLayout.LEFT - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

第八章 面板与布局管理器

8 . 1    布局管理器AWT 面板可以包含组件和其它面板。面板把对组件的布置授权给一个布局管理器。由 java 支持的基本布局管理器有:

•FlowLayout•GridLayout•BorderLayout•CardLayout

Page 2: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

1 、 FlowLayout (流布局管理器)

使用这种布局管理器,其布局策略是容器中的组件按照加入的先后顺序从左到右排列。

当一行排满后会转到下一行显示,每一行中的组件都居中排列。

流布局管理器还有个对齐参数,决定着每行的对齐:FlowLayout.LEFT

FlowLayout.RIGHT

FlowLayout.CENTER

缺省为居中对齐

Page 3: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

FlowLayout 是 Panel 和 applet 的默认布局管理器。

FlowLayout 类有下列构造方法:

public FlowLayout()

public FlowLayout(int align)

public FlowLayout(int align,int hgap, int vgap)

public FlowLayout() 构造方法创建一个新的 FlowLayout 管理器对象以中心对齐并留以缺省的 5 个像素的水平和垂直间距。

public FlowLayout(int align) 构造方法以指定的定位方式、缺省的水平和垂直间距创建一个新的 FlowLayout 管理器。

Page 4: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

定位变元必须是 FlowLayout.LEFT

FlowLayout.RIGHT

或 FlowLayout.CENTER 三者之一。

public FlowLayout(int align,int hgap,int vgap) 构造方法以指定的定位方式和指定的水平和垂直间距创建一个新的 FlowLayout 管理器对象。

align - 是定位值 hgap - 构件之间的水平间距 vgap - 构件之间的垂直间距

Page 5: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

下列代码创建 FlowLayout 管理器对象并在容器里放置三个按钮。

使用流布局管理器局部代码Button button1,button2,button3;

FlowLayout flow;flow = new FlowLayout(FlowLayout.LEFT,10,10);

setLayout(flow);

button1=new Button("Button 1");

button2=new Button("Button 2");

button3=new Button("Button 3");

add(buttonl);

add(button2);

add(button3);

Page 6: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

2 、 GridLayout (网格布局管理器)

使用这种布局管理器,面板的部分空区域变成行列,把添加到面板的每个部件放入网格的一个单元,从顶行开始,每行从左到右进行布局。(调用 add() 方法的顺序非常重要)

GridLayout 类有下列构造方法:

public GridLayout(int rows,int cols)

public GridLayout(int rows,int cols,int hgap,int vgap)

Page 7: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

public GridLayout(int rows,int cols) 构造方法创建一个带指定行数和列数的格布局。

在布局中所有构件有同样的尺寸。如果 rows 或者 cols 中有一个为零,就意味着在一行或一列中可以放置任何数目的对象。

public GridLayout(int rows,int cols,int hgap,int vgap) 构造方法是一个带指定行数和列数的格子布局,在布局中所有构件有同样的尺寸, rows 或者 cols为零意味着“任意数目”。

另外,水平和垂直间距设置为指定值。水平间距放置在每个列之间的左、右边处;垂直间距放置在每个行之间的顶、底边处。

Page 8: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

使用网格布局管理器局部代码

Button button1,button2,button3,button4;

GridLayout g1=new GridLayout(2,2);

setLayout(g1);

button1=new Button("Button 1");

button2=new Button("Button 2");

button3=new Button("Button 3");

button4=new Button("Button 4");

add(buttonl); add(button2);

add(button3); add(button4);

Page 9: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

注意:

GridLayout 类用于在所有构件有相同尺寸的格子里展示 Container 对象的构件。这种布局以指定行数和列数规定构件。

3 、 BorderLayout (边界布局管理器)

使用这种布局管理器,当添加一个部件到面板时需要指明其地理方位( South 、 East 、 North 、 Center 、West ),它也可以有水平和垂直间隙。

它是 windows 、 Dialog 和 Frame 容器的默认布局管理器。

Page 10: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

BorderLayout 类有下列构造方法:

public BorderLayout()

public BorderLayout(int hgap,int vgap)

public BorderLayout() 构造方法创建新的边界布局。

public BorderLayout(int hgap,int int vgap)

构造方法以指定的水平和垂直间距创建新的边界布局。水平和垂直间距规定构件之间的空格。 hgap- 水平间距; vgap- 垂直间距

下列程序使用了 BorderLayout 管理器对象并在 applet 中放置了五个按钮。

Page 11: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

使用边界布局管理器局部代码Button button1,button2,button3,button4,button5;

BorderLayout b1;

b1=new BorderLayout();

setLayout(b1);

button1=new Button("Button 1");

button2=new Button("Button 2");

button3=new Button("Button 3");

button4=new Button("Button 4");

button5=new Button("Button 5");

add("North",button1);

add("South",button2);

Page 12: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

add("East",button3);

add("West",button4);

add("Center",button5);

4 、 CardLayout (卡片布局管理器)使用这种布局管理器,一般用于组织多个面板以便它们能像一堆卡片那样工作。基本上是有一组面板被添加到一个卡片布局中,但一次只有一个是可见的。卡片布局管理器用于部件的滑动显示。可以通过卡片进行调遣,就像观看幻灯片一样。

Page 13: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

每个面板卡片可使用自己的布局管理程序组织它所包含的组件。

因为每个卡片使用不同的布局管理器。因此,每个面板屏幕都有它自己的形状。

CardLayout 共提供下列构造方法:

public CardLayout()

Public CardLayout(int hgap,int vgap)

Page 14: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

public CardLayout() 构造方法创建一个新的卡片布局

public CardLayout(int hgap,int vgap) 构造方法创建一个带指定水平和垂直间距的新的卡片布局。

水平间距安排在左边和右边。垂直间距被放置在顶边和底边处。

hgap - 水平间距 vgag - 垂直间距

为在布局盒中卡片之间的切换, CardLayout 类提供下列方法。

Page 15: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

方 法 说 明

void first(Container parent) 显示第一张卡片

void last(Container parent) 显示最后一张卡片

void next(Container parent) 显示下一张卡片

void previous(Container parent) 显示前一张卡片

void show(Container parent, String name)

显示指定卡片

Page 16: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

注意:

CardLayout 类用于以一副卡片的形式展示 Container 对象的构件,每次只能看见一张卡片。这类用于规定在容器里构件的顺序(第一、最后、下一个和前一个)。

使用卡片布局管理器局部代码Button button1,button2,button3;CardLayout c1;Panel p1=new Panel();add(p1); // 将 p1 添加到 applet中

Page 17: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

c1=new CardLayout();

p1.setLayout(c1); // 设置 p1 的布局管理器

buttonl=new Button("Button 1");

button2=new Button("Button 2");

button3=new Button("Button 3");

buttonl.addActionListener(this);

button2.addActionListener(this);

button3.addActionListener(this);

p1.add(“Button 1",button1);

p1.add(“Button 2",button2);

p1.add(“Button 3",button3);

Page 18: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

在上述程序中的每个卡片都有一个按钮。

当执行这代码时可在显示中看见单个按钮。单击按钮可以切换到盒中的下一个按钮。在到达按钮 3 并单击它就返回到按钮 1 。

为时常能翻转按钮,必须使用 actionPerformed() 方法来处理按钮点击事件。

public void actionPerformed(ActionEvent e)

{

c1.next(p1);

//c1 是 CardLayout , p1 是 applet 中的 panel

}

Page 19: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

5 、 BoxLayout 布局 javax.swing 包提供了一个 Box 类 , 它创建的容器称为盒式容器。其默认的布局管理器是 BoxLayout ,并且不能改变盒式容器的布局。 这样的容器将组件排列在一行或一列。

构造方法: BoxLayout(Container con, int axis)

使用 BoxLayout 的容器 BoxLayout.X_AXIS 或 BoxLayout.Y_AXIS

Page 20: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

类方法:createHorizontalBox() :获得一个具有行型盒式布局

的盒式容器。createVerticalBox() :获得一个具有列型盒式布局的

盒式容器。

例子: P142/12.5

关键代码:Box boxH=Box.createHorizontalBox();

Page 21: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

支撑:盒式容器中组件间的距离。

Box.createHorizontalStrut(int width) : 创建不可见的水平 Struct 类型的对象(水平支撑)。 高度为 0 ,宽度为 width

Box.createVerticalStrut(int height) : 创建不可见的垂直 Struct 类型的对象(垂直支撑)。 宽度为 0 ,高度为 width

Page 22: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

胶水:胶水组件可处理盒式布局容器的剩余空间。

Box.createHorizontalGlue() : 创建不可见的水平 Glue 类型的对象(水平胶水)。 它会帮助组件靠左 / 右对齐。 P143

Box.createVerticalGlue() : 创建不可见的垂直 Struct 类型的对象(垂直胶水)。 它会帮助组件靠上 / 下对齐。 P144

Page 23: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

支撑:盒式容器中组件间的距离。胶水:胶水组件可处理盒式布局容器的剩余空间。Box.createHorizontalStrut(int width) : 创建不可见的水平 Struct 类型的对象(水平支撑)。 高度为 0 ,宽度为 width

Box.createHorizontalGlue() : 创建不可见的水平 Glue 类型的对象(水平胶水)。 它会帮助组件靠左 / 右对齐。 P143

Box.createVerticalStrut(int height) : 创建不可见的垂直 Struct 类型的对象(垂直支撑)。 宽度为 0 ,高度为 width

Box.createVerticalGlue() : 创建不可见的垂直 Struct 类型的对象(垂直胶水)。 它会帮助组件靠上 / 下对齐。 P144

Page 24: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

6 、 Null 和自定义布局管理器当设置布局管理器为 null (空布局)时,需要通过调用各组件的方法 setBounds() 来安排每个组件的在容器中的位置和本身的大小。

setBounds() 的定义:void setBounds(int x, int y, int width, int height);

其中的参数给出组件所占据的矩形区域。

向空布局的容器添加一个组件需要两步:

1 、用 add 方法向容器添加组件2 、组件再调用 setBounds 方法设置该组件在容器中的位置和本身的大小。

Page 25: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

8 . 2 为面板布局

在 applet 中能够包含组件是因为它是 Panel 面板的子类 , Panel 的子类 applet 包含 AWT 组件。

对一个容器的布局 / 安排通常是先创建一个布局管理器,然后再设置它。

1 、用 new 方法创建一个布局管理器对象

2 、用面板的 setLayout() 方法来授权给这个布局管理器对该面板进行布局。

3 、然后在 init() 方法中添加组件等。

Page 26: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

示例import java.awt.*;

import java.applet.*;

public class AppletWithLayout extends Applet

{

Button ok=new Button(“确定” );

Button cancel=new Button(“取消” );

Button apply=new Button(“应用” );

Button option=new Button(“选项” );

Button properties=new Button(“属性” );

Page 27: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

Button ok1=new Button(“确定” );

Button cancel1=new Button(“取消” );

Button apply1=new Button(“应用” );

Button option1=new Button(“选项” );

Button properties1=new Button(“属性” );

Button ok2=new Button(“确定” );

Button cancel2=new Button(“取消” );

Button apply2=new Button(“应用” );

Button option2=new Button(“选项” );

Button properties2=new Button(“属性” );

Page 28: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

public void init()

{

Panel flowPanel=new Panel();

FlowLayout flowbuttons = new FlowLayout (FlowLayout.CENTER, 10,15);

flowPanel.setLayout (flowbuttons);

flowPanel.add(ok);

flowPanel.add(cancel);

flowPanel.add(apply);

flowPanel.add(option);

flowPanel.add(properties);

Page 29: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

Panel gridPanel=new Panel();

GridLayout gridbuttons=new GridLayout(0,3,10,15);

gridPanel.setLayout (gridbuttons);

gridPanel.add(ok1);

gridPanel.add(cancel1);

gridPanel.add(apply1);

gridPanel.add(option1);

gridPanel.add(properties1); 

Panel borderPanel=new Panel();

BorderLayout borderbuttons=new BorderLayout(10,15);

borderPanel.setLayout (borderbuttons);

borderPanel.add(“North”,ok2);

Page 30: 第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有:

borderPanel.add(“East”,cancel2);

borderPanel.add(“West”,apply2);

borderPanel.add(“South”,option2);

borderPanel.add(“Center”,properties2);

CardLayout appletLayout=new CardLayout ();

setLayout(appletLayout); // 为 applet 设置布局管理器add(flowPanel);

add(gridPanel);

add(borderPanel); 

flowPanel.show(false);

gridPanel .show(true);

borderPanel .show(false);

} }