《第5章 图形用户界面设计1001.ppt》由会员分享,可在线阅读,更多相关《第5章 图形用户界面设计1001.ppt(47页珍藏版)》请在金锄头文库上搜索。
1、第5章 图形用户界面设计,复习提问,1.Vector类与数组有什么区别?,2.在什么情况下可以考虑使用Vector类?,3.简要说明java.lang的特殊性。 (可以使用JDK文档),5.1 AWT概述,5.1.1 AWT组件的一般功能 在AWT(Abstract Window Toolkit)的概念中,窗口系统中所显示的各种对象统称为“组件”(Component)。组件有基本组件和容器组件之分。顾名思义,基本组件是不可再分割的组件,基本组件各自都有它们特定的功能。基本组件是构成图形用户界面的基本元素。 除了菜单以外的所有组件都是Component类的子类。从Component类中,它们继承
2、了大量的功能,Component类为实现所有的绘画功能及事件处理提供了基础。参见P91-图5-1。,5.1 AWT概述,5.1.1 AWT组件的一般功能 1大小和位置可以控制:所有组件的显示尺寸和位置都是由布局管理器控制的。组件本身也提供了一些方法改变组件的尺寸,将组件放到适当的位置以及报告组件的合适和最小尺寸。组件还提供了一些方法用于返回关于组件当前尺寸和位置的信息。 2外形可以控制:颜色、字体、效果 3基本绘图功能的支持:Component类提供了paint()、update()和repaint()方法,这些方法使组件能够在屏幕上将自己画出来。 4组件状态可以控制: Component类定
3、义了handleEvent()等一组方法,例如:action()方法,用来处理指定类型的事件;Component类也提供了设置并获得键盘光标,使键盘能够对组件进行控制等方法。,5.1 AWT概述,5.2 Frame和Panel,5.2.1 Frame框架类 AWT的Window类使用户可以创建独立于包含App1et的浏览器窗口的窗口。 Window类提供了用于窗口操作的基本功能。通常,用户使用Window类的子类Frame类和Dialog类。Frame类使用户可以创建带有菜单条的全功能窗口,即框架;Dialog类用于创建和管理对话框。,5.2 Frame和Panel,5.2.1 Frame框架
4、类的构造方法: new Frame() /创建不带标题的框架 new Frame(String s) / 创建带有指定标题的框架 说明:当一个Frame窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用setVisible(true)方法来显示窗口,5.2 Frame和Panel,5.2.1 框架类示例 import java.awt.*; /此包必须引入 public class MyFrame extends Frame /继承Frame类 public static void main(String args) MyFrame fr=new MyFrame(Pleas
5、e see there!This is a frame); fr.setSize(400,200); /窗口大小为400*200 fr.setBackground(Color.blue); /背景为兰色 fr.setVisible(true); /设置窗口可见 public MyFrame(String str) super(str); /调用父类的构造方法 ,5.2 Frame和Panel,5.2.2 Panel面板类 面板是能在屏幕上实际显示的组件。面板继承了Container类,它提供容纳其他组件的功能。Applet类是Panel类的一个子类。要在一个Panel中嵌套其他面板,用户只能创
6、建一个新的Panel,并把它加到窗体(如:Frame或Applet)中,就像用户加入其他GUI组件一样,面板无边框,不能单独使用。,5.2 Frame和Panel,5.2.2 Panel面板类 面板的构造方法有: Panel() 建立一个新面板,采用默认的布局管理器 Panel(LayoutManagerlayout) 建立一个新面板,采用指定的布局管理器 从构造方法可以看出,面板没有标题,它由布局管理器进行布局的管理,5.2 Frame和Panel,5.2.2 Panel面板类举例 import java.awt.*; class PanelTest extends Panel public
7、 static void main(String args) PanelTest p= new PanelTest(); Frame f=new Frame(在框架中添加面板示例!); f.add(p); /将面板添加到框架窗体 f.setSize(300,200); f.setVisible(true); ,5.3 布局管理器,一般概念: 在缺省情况下,每个容器中都有布局管理器。如果容器的缺省布局管理器不能满足用户的需要,用户可以使用别的布局管理器来代替缺省的。 AWT提供了五种布局管理器:FlowLayout、GridLayout、BorderLayout、CardLayout和GridB
8、agLayout。 各布局管理器对容器的管理方法不同。,5.3 布局管理器,关于默认布局管理器: 如果用户不指定容器所使用的布局管理器,那么容器将使用自己缺省的布局管理器。每当容器需要改变外观时,这些缺省的布局管理器会发挥作用。大多数布局管理器的方法都不需要程序直接调用。AWT提供的布局管理器各有各的长处和缺点。见教材P83表1、表2。,5.3 布局管理器,选择布局管理器的基本原则 用户要求尽量使用所有的空间来显示组件,可以考虑使用BorderLayout和GridBagLayout。如果使用BorderLayout,用户应该将占用空间最大的组件放在中心部位。如果使用GridLayout,用户
9、需要为组件设置限制条件。 用户需要在紧凑的一行中以组件的自然尺寸显示较少组件时,用户可以考虑用面板容纳组件,并使用面板的缺省布局管理器FlowLayout。 用户需要在多行或多列中显示一些同样尺寸的组件,GridLayout最适合此情况。如果有必要的话,可以使用面板来容纳组件。,5.3 布局管理器,5.3.1 FlowLayout顺序布局管理器 特点:FlowLayout也称为流式布局管理器,其排版方式就像流程或文本处理器在处理一段文字一样,常用于RadioButton或CheckBox等组件的排列 ,它将组件逐个放置在容器的一行中,一行满后另起一行。,5.3 布局管理器,5.3.1 Flow
10、Layout顺序布局管理器的构造方法 public FlowLayout() 建立默认布局 public FlowLayout(int align) 设置对齐方法,对齐常量包括FlowLayout.LEFT 、FlowLayout.RIGHT 、FlowLayout.CENTER public FlowLayout(int align,int hgap,int vgap) 参数hgap和vgap表示组件的水平间距和垂直间距,5.3 布局管理器,顺序布局管理器举例 import java.awt.*; public class TestFlowLayout public static void
11、main(String args) Frame f=new Frame(这是一个布局管理器); f.setLayout(new FlowLayout(); f.add(new Button(第一个按钮); f.add(new Button(第二个按钮); f.add(new Button(第三个按钮); f.add(new Button(第四个按钮); f.setSize(300,300); f.setVisible(true); ,5.3 布局管理器,5.3.2 BorderLayout边界布局管理器 BorderLayout将容器分为东、南、西、北、中5 个区域,按照上北下南左西右东的格局
12、分布,各用一个方位单词表示 东:East 南:South 西:West 北:North 中:Center,5.3 布局管理器,5.3.2 BorderLayout边界布局管理器 import java.awt.*; public class TestBorderLayout public static void main(String args) Frame f=new Frame(“这是一个边界布局管理器”); f.add(new Button(“第一个按钮”); f.add(new Button(“第二个按钮”); f.setSize(300,300);f.setVisible(true)
13、; ,5.3 布局管理器,5.3.3 GridLayout网格布局管理器 GridLayout网格布局管理器用于将容器区域划分为一个矩形网格(区域),其组件按行和列排列,每个组件占一格。,5.3 布局管理器,5.3.3 GridLayout的构造方法: GridLayout() /成一个单列的网格布局 GridLayout(int row,int col) 生成一个设定行数和列数的网格布局 GridLayout(int row,int col,int horz,int vert) 可以设置组件之间的水平和垂直间隔,5.3 布局管理器应用举例,网格布局示例: import java awt.*;
14、 public class GridLayoutExample public static void main(String args) Frame f=new Frame(网格布局演示!); String str=1,2,3,4,5,6,7,8,9; f.setLayout(new GridLayout(3,3); Button btn=new Buttonstr.length; / 创建按钮数组 for(int i=0;istr.length;i+) btni=new Button(stri); f.add(btni); f.setSize(300,200); f.setVisible(t
15、rue); ,复习提问,1、说出8种窗口组件。,2、框架和面板有什么不同?,3、FlowLayout是什么?有哪些主要特点?,5.3 布局管理器,5.3.4 CardLayout卡片布局管理器 卡片布局管理器是采用卡片式的管理方法,可存储几个不同的布局,每个布局就像是一个卡片组中的一张卡片,在一个给定的时间总会且只有一张卡片在顶层,其它卡片看不到,5.3 布局管理器,设计一个卡片组共5张卡片,每隔一定时间切换一张。 import java.applet.Applet; public class CardLayoutDemo extends Applet CardLayout card=new
16、CardLayout(); pubilc void init() setLayout(card); for(int i=1;i=5;i+) add(String.valueOf(i),new Button(卡片号:+i); card.show(this,String.valueOf(i); for (int j=1;j1000;j+) ; /等待1000次运算,起延迟作用 ,5.3 布局管理器,5.3.5 GridBagLayout网格包布局管理器 网格包布局管理器可以使组件具有不同的大小,且程序能够控制 网格包布局管理器的组件不一定只占一个网格,可占多个网格 网格包布局管理器的组件可以由程序选择放置位置,不是自动由左到右,由上到下排列。 网格包布局对每个组件施加空间控制是通过类GridBagConstraints(网格包约束条件)来实现的,5.4 AWT事件模型,5.4.1 JDK1.0和JDK1.1事件处理模型 JDK1.0的事件处