Upload
iden
View
166
Download
0
Embed Size (px)
DESCRIPTION
第八章 面板与布局管理器 8 . 1 布局管理器 AWT 面板可以包含组件和其它面板。面板把对组件的布置 授权 给一个布局管理器。 由 java 支持的基本布局管理器有: FlowLayout GridLayout BorderLayout CardLayout. 1 、 FlowLayout (流布局管理器) 使用这种布局管理器,其 布局策略是容器中的组件按照加入的先后顺序从左到右排列。 当一行排满后会转到下一行显示,每一行中的组件都居中排列。 流布局管理器还有个 对齐参数 ,决定着每行的对齐: FlowLayout.LEFT - PowerPoint PPT Presentation
Citation preview
第八章 面板与布局管理器
8 . 1 布局管理器AWT 面板可以包含组件和其它面板。面板把对组件的布置授权给一个布局管理器。由 java 支持的基本布局管理器有:
•FlowLayout•GridLayout•BorderLayout•CardLayout
1 、 FlowLayout (流布局管理器)
使用这种布局管理器,其布局策略是容器中的组件按照加入的先后顺序从左到右排列。
当一行排满后会转到下一行显示,每一行中的组件都居中排列。
流布局管理器还有个对齐参数,决定着每行的对齐:FlowLayout.LEFT
FlowLayout.RIGHT
FlowLayout.CENTER
缺省为居中对齐
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 管理器。
定位变元必须是 FlowLayout.LEFT
FlowLayout.RIGHT
或 FlowLayout.CENTER 三者之一。
public FlowLayout(int align,int hgap,int vgap) 构造方法以指定的定位方式和指定的水平和垂直间距创建一个新的 FlowLayout 管理器对象。
align - 是定位值 hgap - 构件之间的水平间距 vgap - 构件之间的垂直间距
下列代码创建 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);
2 、 GridLayout (网格布局管理器)
使用这种布局管理器,面板的部分空区域变成行列,把添加到面板的每个部件放入网格的一个单元,从顶行开始,每行从左到右进行布局。(调用 add() 方法的顺序非常重要)
GridLayout 类有下列构造方法:
public GridLayout(int rows,int cols)
public GridLayout(int rows,int cols,int hgap,int vgap)
public GridLayout(int rows,int cols) 构造方法创建一个带指定行数和列数的格布局。
在布局中所有构件有同样的尺寸。如果 rows 或者 cols 中有一个为零,就意味着在一行或一列中可以放置任何数目的对象。
public GridLayout(int rows,int cols,int hgap,int vgap) 构造方法是一个带指定行数和列数的格子布局,在布局中所有构件有同样的尺寸, rows 或者 cols为零意味着“任意数目”。
另外,水平和垂直间距设置为指定值。水平间距放置在每个列之间的左、右边处;垂直间距放置在每个行之间的顶、底边处。
使用网格布局管理器局部代码
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);
注意:
GridLayout 类用于在所有构件有相同尺寸的格子里展示 Container 对象的构件。这种布局以指定行数和列数规定构件。
3 、 BorderLayout (边界布局管理器)
使用这种布局管理器,当添加一个部件到面板时需要指明其地理方位( South 、 East 、 North 、 Center 、West ),它也可以有水平和垂直间隙。
它是 windows 、 Dialog 和 Frame 容器的默认布局管理器。
BorderLayout 类有下列构造方法:
public BorderLayout()
public BorderLayout(int hgap,int vgap)
public BorderLayout() 构造方法创建新的边界布局。
public BorderLayout(int hgap,int int vgap)
构造方法以指定的水平和垂直间距创建新的边界布局。水平和垂直间距规定构件之间的空格。 hgap- 水平间距; vgap- 垂直间距
下列程序使用了 BorderLayout 管理器对象并在 applet 中放置了五个按钮。
使用边界布局管理器局部代码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);
add("East",button3);
add("West",button4);
add("Center",button5);
4 、 CardLayout (卡片布局管理器)使用这种布局管理器,一般用于组织多个面板以便它们能像一堆卡片那样工作。基本上是有一组面板被添加到一个卡片布局中,但一次只有一个是可见的。卡片布局管理器用于部件的滑动显示。可以通过卡片进行调遣,就像观看幻灯片一样。
每个面板卡片可使用自己的布局管理程序组织它所包含的组件。
因为每个卡片使用不同的布局管理器。因此,每个面板屏幕都有它自己的形状。
CardLayout 共提供下列构造方法:
public CardLayout()
Public CardLayout(int hgap,int vgap)
public CardLayout() 构造方法创建一个新的卡片布局
public CardLayout(int hgap,int vgap) 构造方法创建一个带指定水平和垂直间距的新的卡片布局。
水平间距安排在左边和右边。垂直间距被放置在顶边和底边处。
hgap - 水平间距 vgag - 垂直间距
为在布局盒中卡片之间的切换, CardLayout 类提供下列方法。
方 法 说 明
void first(Container parent) 显示第一张卡片
void last(Container parent) 显示最后一张卡片
void next(Container parent) 显示下一张卡片
void previous(Container parent) 显示前一张卡片
void show(Container parent, String name)
显示指定卡片
注意:
CardLayout 类用于以一副卡片的形式展示 Container 对象的构件,每次只能看见一张卡片。这类用于规定在容器里构件的顺序(第一、最后、下一个和前一个)。
使用卡片布局管理器局部代码Button button1,button2,button3;CardLayout c1;Panel p1=new Panel();add(p1); // 将 p1 添加到 applet中
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);
在上述程序中的每个卡片都有一个按钮。
当执行这代码时可在显示中看见单个按钮。单击按钮可以切换到盒中的下一个按钮。在到达按钮 3 并单击它就返回到按钮 1 。
为时常能翻转按钮,必须使用 actionPerformed() 方法来处理按钮点击事件。
public void actionPerformed(ActionEvent e)
{
c1.next(p1);
//c1 是 CardLayout , p1 是 applet 中的 panel
}
5 、 BoxLayout 布局 javax.swing 包提供了一个 Box 类 , 它创建的容器称为盒式容器。其默认的布局管理器是 BoxLayout ,并且不能改变盒式容器的布局。 这样的容器将组件排列在一行或一列。
构造方法: BoxLayout(Container con, int axis)
使用 BoxLayout 的容器 BoxLayout.X_AXIS 或 BoxLayout.Y_AXIS
类方法:createHorizontalBox() :获得一个具有行型盒式布局
的盒式容器。createVerticalBox() :获得一个具有列型盒式布局的
盒式容器。
例子: P142/12.5
关键代码:Box boxH=Box.createHorizontalBox();
支撑:盒式容器中组件间的距离。
Box.createHorizontalStrut(int width) : 创建不可见的水平 Struct 类型的对象(水平支撑)。 高度为 0 ,宽度为 width
Box.createVerticalStrut(int height) : 创建不可见的垂直 Struct 类型的对象(垂直支撑)。 宽度为 0 ,高度为 width
胶水:胶水组件可处理盒式布局容器的剩余空间。
Box.createHorizontalGlue() : 创建不可见的水平 Glue 类型的对象(水平胶水)。 它会帮助组件靠左 / 右对齐。 P143
Box.createVerticalGlue() : 创建不可见的垂直 Struct 类型的对象(垂直胶水)。 它会帮助组件靠上 / 下对齐。 P144
支撑:盒式容器中组件间的距离。胶水:胶水组件可处理盒式布局容器的剩余空间。Box.createHorizontalStrut(int width) : 创建不可见的水平 Struct 类型的对象(水平支撑)。 高度为 0 ,宽度为 width
Box.createHorizontalGlue() : 创建不可见的水平 Glue 类型的对象(水平胶水)。 它会帮助组件靠左 / 右对齐。 P143
Box.createVerticalStrut(int height) : 创建不可见的垂直 Struct 类型的对象(垂直支撑)。 宽度为 0 ,高度为 width
Box.createVerticalGlue() : 创建不可见的垂直 Struct 类型的对象(垂直胶水)。 它会帮助组件靠上 / 下对齐。 P144
6 、 Null 和自定义布局管理器当设置布局管理器为 null (空布局)时,需要通过调用各组件的方法 setBounds() 来安排每个组件的在容器中的位置和本身的大小。
setBounds() 的定义:void setBounds(int x, int y, int width, int height);
其中的参数给出组件所占据的矩形区域。
向空布局的容器添加一个组件需要两步:
1 、用 add 方法向容器添加组件2 、组件再调用 setBounds 方法设置该组件在容器中的位置和本身的大小。
8 . 2 为面板布局
在 applet 中能够包含组件是因为它是 Panel 面板的子类 , Panel 的子类 applet 包含 AWT 组件。
对一个容器的布局 / 安排通常是先创建一个布局管理器,然后再设置它。
1 、用 new 方法创建一个布局管理器对象
2 、用面板的 setLayout() 方法来授权给这个布局管理器对该面板进行布局。
3 、然后在 init() 方法中添加组件等。
示例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(“属性” );
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(“属性” );
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);
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);
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);
} }