单元8 图形用户界面设计ppt课件.ppt
在此输入您的封面副标题单元单元8 图形用户界面设计图形用户界面设计单元单元8 图形用户界面设计图形用户界面设计28.1 图形用户界面图形用户界面图形用户界面即图形用户界面即Graphics User Interface,简称为,简称为GUI。目前,图形用户界面是软件设计的通用标准,已经成为一种时尚,几乎所目前,图形用户界面是软件设计的通用标准,已经成为一种时尚,几乎所有的程序设计语言(如典型的有的程序设计语言(如典型的Visual Basic、Visual C+语言等)都语言等)都提供了提供了GUI功能。功能。8.1.1 设计设计GUI所需的程序包所需的程序包在在Java语言中,要创建语言中,要创建GUI界面,需要利用一些特定的类库界面,需要利用一些特定的类库(称为组件类称为组件类)来实现,这些用来设计图形用户界面的类库,基本上都放在来实现,这些用来设计图形用户界面的类库,基本上都放在java.awt、和和javax.swing等系统程序包中,它们为等系统程序包中,它们为GUI的设计提供了丰富多样的的设计提供了丰富多样的功能。功能。单元单元8 图形用户界面设计图形用户界面设计38.1.2 AWT基本知识基本知识1.AWT类和接口的继承关系类和接口的继承关系常用的组件类包括常用的组件类包括Label(标签类)、(标签类)、Button(按钮类)、(按钮类)、Checkbox(复选框类)、(复选框类)、RadioButton(单选框类)、(单选框类)、TextField(文本域类)、(文本域类)、TextArea(文本区域类)、(文本区域类)、Choice(选(选择框类)、择框类)、list(列表框类)、(列表框类)、Cavas(画布类)、(画布类)、Menu(菜单类)(菜单类)以及以及Window(窗口类)、(窗口类)、Panel(面板类)、(面板类)、Frame(框架类)、(框架类)、Applet类、类、Dialog(对话框类)等容器类(对话框类)等容器类(Container),还包括还包括FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout等布局管理器类(等布局管理器类(LayoutManager)。)。AWT组组件类的继承关系如图件类的继承关系如图8-2所示。所示。单元单元8 图形用户界面设计图形用户界面设计4单元单元8 图形用户界面设计图形用户界面设计52.设计设计GUI的一般要素与基本过程的一般要素与基本过程(1)组件对象的创建。)组件对象的创建。(2)容器对象的创建。)容器对象的创建。(3)组件的添加或删除。)组件的添加或删除。3.AWT组件的一般功能组件的一般功能(1)大小和位置可以控制。)大小和位置可以控制。设置组件大小与位置的方法如下:设置组件大小与位置的方法如下:public void setSize(int w,int h) :设置组件的大小。:设置组件的大小。public void setLocation(int a,int b):设置组件在容器中的位置,:设置组件在容器中的位置,组件距容器的左、上边界各为组件距容器的左、上边界各为a、b个像素。个像素。(2)外形可以控制。)外形可以控制。例如利用例如利用setForeground()方法设置组件前景色,方法设置组件前景色,setBackground()方法设置背景颜色。方法设置背景颜色。(3)组件的状态可以控制。)组件的状态可以控制。用用show() 或或setVisible()方法设置组件是否可见。方法设置组件是否可见。 (4)基本绘画功能的支持。)基本绘画功能的支持。paint()用于在屏幕上绘图或输出文本内容,用于在屏幕上绘图或输出文本内容,repaint()方法在清除背景方法在清除背景后重新绘图或输出文本(即更新)。后重新绘图或输出文本(即更新)。单元单元8 图形用户界面设计图形用户界面设计68.2 AWT组件类组件类8.2.1 LayoutManager类类Java语言中,提供了语言中,提供了LayoutManager这个布局管理器类来统一设置组这个布局管理器类来统一设置组件在容器中的排列位置。就像组织考试至少要先对座位有一个布局和规划件在容器中的排列位置。就像组织考试至少要先对座位有一个布局和规划一样,可以是分一样,可以是分5排,每排排,每排6人,也可以分人,也可以分6排,每排排,每排5人。人。这这5种布局管理器类分别是:种布局管理器类分别是:FlowLayout(顺序)、(顺序)、BorderLayout(边界)、(边界)、GridLayout(网(网格)、格)、CardLayout(卡片)和(卡片)和GridBagLayout(网格包)。(网格包)。单元单元8 图形用户界面设计图形用户界面设计71.FlowLayout类类顺序布局管理器类或流式布局管理器类,其排列方式就像在顺序布局管理器类或流式布局管理器类,其排列方式就像在word等文本处等文本处理器中处理一段文字一样,将组件从左到右逐个放置,并自动换行。理器中处理一段文字一样,将组件从左到右逐个放置,并自动换行。FlowLayout有如下几个重载的构造方法:有如下几个重载的构造方法:(1)public FlowLayout()。(2)public FlowLayout(int a)。设置对齐方式的整型常量设置对齐方式的整型常量a有有5个:个:CENTER:各行组件都居中对齐。:各行组件都居中对齐。LEADING:各行组件与容器的开始边对齐。:各行组件与容器的开始边对齐。LEFT:各行组件都左对齐。:各行组件都左对齐。RIGHT:各行组件都右对齐。:各行组件都右对齐。TRAILING:各行组件都与容器的结束边对齐。:各行组件都与容器的结束边对齐。单元单元8 图形用户界面设计图形用户界面设计8(3)public FlowLayout(int a,int h,int v)。FlowLayout的常用方法还有:的常用方法还有:(1)void setAlignment(int a)。该方法用来设置某个布局的对齐。该方法用来设置某个布局的对齐方式,用来改变某个布局已有的对齐方式。方式,用来改变某个布局已有的对齐方式。(2)void layoutContainer(Container t)。该方法以。该方法以FlowLayout的默认对齐方式重新布局。的默认对齐方式重新布局。单元单元8 图形用户界面设计图形用户界面设计92.BorderLayout类类称边界布局管理器类,意思是将容器分为东、南、西、北、中称边界布局管理器类,意思是将容器分为东、南、西、北、中5个方位。个方位。东:东:East;南:;南:South;西:;西:West;北:;北:North;中:;中:Center。此外,还可使用此外,还可使用5个静态常量(大写)表示方位个静态常量(大写)表示方位:NORTH、SOUTH、WEST、EAST、CENTER(缺省值)。缺省值)。3.GridLayout类类网格布局管理器类,可以严格设定行数和列数。其组件按行和列排列。网格布局管理器类,可以严格设定行数和列数。其组件按行和列排列。的构造方法:的构造方法:(1)GridLayout()。()。(2)GridLayout(int a,int b)。)。(3)GridLayout(int a,int b,int h,int v)。)。单元单元8 图形用户界面设计图形用户界面设计10【案例案例8-4】网格布局方式。网格布局方式。import java.awt.*;public class F4 public static void main(String args) Frame f=new Frame(网格布局管理器网格布局管理器);f.setLayout(new GridLayout(2,2);f.add(new Button(第一个按钮第一个按钮);f.add(new Button(第二个按钮第二个按钮);f.add(new Button(第三个按钮第三个按钮);f.add(new Button(第四个按钮第四个按钮);f.setSize(300,300);f.setVisible(true);运行结果如图8-6所示。 单元单元8 图形用户界面设计图形用户界面设计114.CardLayout类类卡片布局管理器类,用来生成一个卡片组,其中包含若干张具有重叠效卡片布局管理器类,用来生成一个卡片组,其中包含若干张具有重叠效果的卡片。果的卡片。CardLayout类提供了类提供了show()方法来显示卡片内容。方法来显示卡片内容。单元单元8 图形用户界面设计图形用户界面设计12【案例案例8-5】卡片布局方式。卡片布局方式。设计卡片组,将设计卡片组,将【案例案例8-4】中按钮分别放在四个卡片中显示,共中按钮分别放在四个卡片中显示,共4张卡片。张卡片。代码如下:代码如下:import java.awt.*;public class F5 public static void main(String args) Frame f=new Frame(网格布局管理器网格布局管理器); f.setSize(300,300);f.setVisible(true); CardLayout c=new CardLayout(); f.setLayout(c); f.add(0,new Button(0);/1表示卡片位置表示卡片位置 f.add(1,new Button(1); f.add(2,new Button(2); f.add(3,new Button(3); c.show(f,0); /显示第显示第1张卡片张卡片 c.show(f,1);/显示第显示第2张卡片张卡片 c.show(f,2); c.show(f,3); 运行结果如图运行结果如图8-7所示。所示。前面三张卡片是存在的,它前面三张卡片是存在的,它们依次显示,只是被极快地们依次显示,只是被极快地覆盖了。覆盖了。单元单元8 图形用户界面设计图形用户界面设计139.2.2 Container类类要设计要设计GUI程序,必须要有容器,否则界面是无法显示出来的。容器其实程序,必须要有容器,否则界面是无法显示出来的。容器其实也是一种组件,是一种比较特殊的组件,具有组件的所有性质,同时又具也是一种组件,是一种比较特殊的组件,具有组件的所有性质,同时又具有容纳其它组件和容器的功能,可用来容纳和排列其他组件。容器类对应有容纳其它组件和容器的功能,可用来容纳和排列其他组件。容器类对应的的AWT组件类是组件类是Container,它是一个抽象类,是所有容器的父类。根,它是一个抽象类,是所有容器的父类。根据图据图9-2所示的所示的AWT组件类的继承关系,发现组件类的继承关系,发现Container类常用的直接类常用的直接子类是子类是Window、Panel。而。而Window类的直接子类是类的直接子类是Frame和和Dialog。Applet是是Panel的直接子类。的直接子类。Panel和和Dialog没有独立性,没有独立性,它们的对象须依靠它们的对象须依靠Window或或Applet而存在。而存在。此外,此外,ScrollPanel类也是一个容器类,其对象也是没有独立性的,并类也是一个容器类,其对象也是没有独立性的,并且不能设置布局,不能进行布局管理。且不能设置布局,不能进行布局管理。单元单元8 图形用户界面设计图形用户界面设计142.Panel类类 Panel类的构造方法有:类的构造方法有:(1)Panel()。建立一个默认布局管理为。建立一个默认布局管理为FlowLayout的面板对象。的面板对象。(2)Panel(LayoutManager l)。建立一个指定布局。建立一个指定布局l的面板对象。的面板对象。面板没有标题,因为它本来就不是独立的窗口。面板没有标题,因为它本来就不是独立的窗口。3.Dialog类类Dialog类是对话框类。对话框是一种特殊的依附某个窗口的、不能改变大类是对话框类。对话框是一种特殊的依附某个窗口的、不能改变大小、只能移动或关闭的窗口。它随着依存窗口的关闭而关闭。小、只能移动或关闭的窗口。它随着依存窗口的关闭而关闭。Dialog类的构造方法如下:类的构造方法如下:public Dialog(Frame f,String s,Boolean b)。用来创建一个标题。用来创建一个标题由指定由指定s的对话框。的对话框。其中其中f是自定义对话框的所有者是自定义对话框的所有者,即对话框所依附的容器。即对话框所依附的容器。b取值为取值为false时,时,则对话框可以从其所依附的容器中随便移动;取值为则对话框可以从其所依附的容器中随便移动;取值为true时时, 则对话框与则对话框与它所依附的容器结合在一起,不可以从其所依附的容器中随便移动。对话它所依附的容器结合在一起,不可以从其所依附的容器中随便移动。对话框需要用框需要用show()方法或方法或setVisible()方法显示方法显示,用用setSize()方法设置方法设置大小,用大小,用hide()方法隐藏。方法隐藏。单元单元8 图形用户界面设计图形用户界面设计159.2.3 非容器基本组件类非容器基本组件类1.Label类类Label类是标签类,用于显示一些提示性、说明性的单行文字。类是标签类,用于显示一些提示性、说明性的单行文字。构造方法:构造方法:(1)Label()。用来新建一个显示文字为空的标签对象。用来新建一个显示文字为空的标签对象。(2)Label(String s)。用来新建一个包含给定文本。用来新建一个包含给定文本s的标签对象。的标签对象。(3)Label(String s,int a)。用来新建一个包含给定文本。用来新建一个包含给定文本s和给定对齐和给定对齐方式方式a的标签对象。的标签对象。此外,此外,Label类提供了其他的常用方法:类提供了其他的常用方法:(1)pubic int getAlignment()。用来返回标签上当前的对齐方式。用来返回标签上当前的对齐方式。(2)public String getText()。用来返回标签上当前的文字。用来返回标签上当前的文字。(3)public void setAlignment (int a)。用来设置标签上文字的对。用来设置标签上文字的对齐方式。齐方式。(4)public void setText(String s)。用来设置标签上的文字。用来设置标签上的文字。单元单元8 图形用户界面设计图形用户界面设计162.Button类类Button类是按钮类,是一种最常用的组件,我们在前面的例子已经介绍过。类是按钮类,是一种最常用的组件,我们在前面的例子已经介绍过。下面我们主要介绍一下它的构造方法。下面我们主要介绍一下它的构造方法。Button类的构造方法如下:类的构造方法如下:(1)public Button()。用来建立一个无标签的按钮对象。用来建立一个无标签的按钮对象。(2)public Button(String s)。用来建立一个带标签。用来建立一个带标签s的按钮对象。的按钮对象。例:例:b1.setLabel(交互按钮交互按钮1) 将按钮将按钮b1的标签设为的标签设为“交互按钮交互按钮1”。Button类的其他常用方法:类的其他常用方法:(1)public String getLabel()。用来返回按钮上的标签文字。用来返回按钮上的标签文字。(2)public void setLabel(String s)。将按钮上的文字设置为。将按钮上的文字设置为s。单元单元8 图形用户界面设计图形用户界面设计173.TextField类类TextField类是文本域类,常称单行文本框。类是文本域类,常称单行文本框。的构造方法:的构造方法:(1)public TextField()。构造一个不带默认文字的空文本框对象。构造一个不带默认文字的空文本框对象。(2)public TextField(String s)。构造带有默认文字构造带有默认文字s的文本框对象。的文本框对象。(3)public TextField(int c)。构造一个指定列数。构造一个指定列数c的文本框对象。的文本框对象。(4)public TextField(String s,int c)。用来构造一个指定列数。用来构造一个指定列数c、带、带有默认文字有默认文字s的文本框对象。的文本框对象。常用方法:常用方法: (1)public void setEchoChar(char c)。用来设置用户从键盘输入字。用来设置用户从键盘输入字符的回显字符符的回显字符,例如用户输入密码时显示例如用户输入密码时显示“*”。(2)public void setText(String s)。将文本框文本内容设置为。将文本框文本内容设置为s。单元单元8 图形用户界面设计图形用户界面设计184.TextArea类类是文本区域类,也称文本区或多行文本框。是文本区域类,也称文本区或多行文本框。构造方法:构造方法:(1)TextArea()。用来创建一个默认大小的文本区对象。用来创建一个默认大小的文本区对象。(2)TextArea(int r,int c)。创建一个指定行数。创建一个指定行数r和列和列c的文本区对象。的文本区对象。(3)TextArea(String s)。创建一个默认文本内容为。创建一个默认文本内容为s的文本区对象。的文本区对象。(4)TextArea(String s,int r,int c)。用来创建一个指定行数。用来创建一个指定行数r和列数和列数c且设定默认文本内容且设定默认文本内容s的文本区对象。的文本区对象。(5)TextArea(String s,int r,int c,int b)。用来创建指定行数。用来创建指定行数r、列、列数数c、包含文本内容、包含文本内容s并带有滚动条的文本区对象。并带有滚动条的文本区对象。单元单元8 图形用户界面设计图形用户界面设计195.Choice类类常用方法如下:常用方法如下:(1)public void addItem(String a)。(2)public void select(String s)。(3)public String getItem(int i)。(4)public int setSelectIndex()。(5)public int getSelectItem()。(6)public void select(int p)。(7)public int countItem()。单元单元8 图形用户界面设计图形用户界面设计20【案例案例8-12】建立下拉列表框对象及其若干选项对象,进行学历的选择。建立下拉列表框对象及其若干选项对象,进行学历的选择。import java.awt.*;import java.applet.Applet;public class F12 extends Applet public void init() Label l=new Label(请选择学历请选择学历); Choice c=new Choice(); add(l);add(c); String s=小学小学,初中初中,高中高中,本科本科,硕士硕士,博士博士; int x=0; while(x=5) c.addItem(sx);x+; 程序运行结果如图程序运行结果如图8-14所示。所示。单元单元8 图形用户界面设计图形用户界面设计216.Checkbox类类(1)public Checkbox()。用来创建一个无标签、初始为。用来创建一个无标签、初始为“关关”的的复选框对象。复选框对象。(2)public Checkbox(String s)。用来创建有标签、初始为。用来创建有标签、初始为“关关”的复选框。的复选框。(3)public Checkbox(String s,Boolean b)。用来创建一个。用来创建一个有标签、初始值由有标签、初始值由b决定的复选框对象。决定的复选框对象。单元单元8 图形用户界面设计图形用户界面设计227.RadioButton类类单选按钮的常用方法:单选按钮的常用方法:(1)public void setLabel(String s)。将单选按钮的标签文字设置为。将单选按钮的标签文字设置为s。(2)public void setState(booean b)。将单选按钮对象的状态设置。将单选按钮对象的状态设置b。(3)public String getState()。用来返回单选按钮对象的选中状态。用来返回单选按钮对象的选中状态。(4)public void setCheckboxGroup(CheckboxGroup g)。用来设置。用来设置单选按钮对象所在的复选框组。单选按钮对象所在的复选框组。(5)public CheckboxGroup getCheckboxGroup()。用来返回单选按钮。用来返回单选按钮对象所在的复选框组。对象所在的复选框组。(6)public String getLabel()。用来返回单选按钮对象上的标签文字。用来返回单选按钮对象上的标签文字。单元单元8 图形用户界面设计图形用户界面设计238.3 事件处理模型事件处理模型8.3.1 基本要素与流程基本要素与流程1.事件事件事件(事件(Event)是用户对组件的一个操作。)是用户对组件的一个操作。2.事件源事件源事件源(事件源(Event source)是发生事件的组件对象。)是发生事件的组件对象。3.事件处理器事件处理器 也称事件监听器(也称事件监听器(Event listener),是只包含抽象方法声明的接口,负),是只包含抽象方法声明的接口,负责处理事件的多个方法,方法接受一个事件对象,能够接受解析和处理事责处理事件的多个方法,方法接受一个事件对象,能够接受解析和处理事件类对象。件类对象。单元单元8 图形用户界面设计图形用户界面设计244.事件适配器事件适配器为简化编程,为简化编程,Java针对有两种以上方法的事件监听器定义了相应的实现类(所有针对有两种以上方法的事件监听器定义了相应的实现类(所有方法都被重写了,但不做任何实际工作),这些实现类就称为事件适配器方法都被重写了,但不做任何实际工作),这些实现类就称为事件适配器(Event Adapter)。5.事件、事件源和事件监听器三者关系事件、事件源和事件监听器三者关系三者之间的关系如图三者之间的关系如图8-16所示。所示。单元单元8 图形用户界面设计图形用户界面设计258.3.2 事件处理常用方法事件处理常用方法注册方法的格式为:某事件源名注册方法的格式为:某事件源名.add某事件监听器名某事件监听器名(监听者监听者);“add某事件监听器名某事件监听器名”是注册方法,监听者一般以某事件类的监听器是注册方法,监听者一般以某事件类的监听器对象表示。对象表示。1.ActionEvent事件事件ActionEvent事件类常用的几个方法:事件类常用的几个方法:(1)String getActionCommand( )。用来返回发生。用来返回发生ActionEvent事件的组件对象上的提示性的文字信息。事件的组件对象上的提示性的文字信息。(2)String getSource( )。用来返回发生。用来返回发生ActionEvent事件的组事件的组件对象名称。件对象名称。单元单元8 图形用户界面设计图形用户界面设计262.WindowEvent事件事件对应窗口事件:对应窗口事件:(1)WindowActivatde(WindowEvent e)。用来使窗口激活。用来使窗口激活。(2)windowClosed(WindowEvent e)。用来调用。用来调用dispose方法关方法关闭窗口。闭窗口。(3)windowClosing(WindowEvent e)。利用窗口关闭按钮关闭窗口。利用窗口关闭按钮关闭窗口。(4)windowDeactivated(WindowEvent e)。窗口成为非活动窗口。窗口成为非活动窗口。(5)windowDeiconified(WindowEvent e)。使窗口从最小化还原。使窗口从最小化还原。(6)windowIconified(WindowEvent e)。使窗口变为最小化图标。使窗口变为最小化图标。(7)windowOpened (WindowEvent e)。使窗口首次打开。使窗口首次打开。单元单元8 图形用户界面设计图形用户界面设计27适配器适配器WindowAdapter已经实现已经实现7个抽象方法(虽然都为空):个抽象方法(虽然都为空):(1)public void windowActivatde(WindowEvent e) (2)public void windowClosed(WindowEvent e)(3)public void windowClosing(WindowEvent e)(4)public void windowDeactivated(WindowEvent e)(5)public void windowDeiconified(WindowEvent e)(6)public void windowIconified(WindowEvent e)(7)public void windowOpened (WindowEvent e) 单元单元8 图形用户界面设计图形用户界面设计283.MouseEvent事件和事件和MouseMotionEvent事件事件组件注册鼠标事件的格式为:组件注册鼠标事件的格式为:addMouseListener(监听者监听者); 或或addMouseMotionListener(监听者监听者);MouseEvent类的常用方法:类的常用方法:(1)int getX()和和int getY()。用来获取鼠标指针的。用来获取鼠标指针的X坐标和坐标和Y坐标。坐标。(2)Point getPoint()。用来获取鼠标指针的当前位置坐标。用来获取鼠标指针的当前位置坐标。(3)int getClickCount()。用来获取鼠标单击次数。返回。用来获取鼠标单击次数。返回1为单击为单击, 2为双击。为双击。(4)isPopupTrigger()。检查是否按下右键,返回。检查是否按下右键,返回true时表示按下右键,返回时表示按下右键,返回false时表示按下左键。时表示按下左键。单元单元8 图形用户界面设计图形用户界面设计29MouseListener接口的常用方法:接口的常用方法:(1)mouseClicked(MouseEvent e)。处理鼠标单击(按下后快速释。处理鼠标单击(按下后快速释放)事件,即鼠标光标在组件单击时(按下后快速释放)调用该方法。放)事件,即鼠标光标在组件单击时(按下后快速释放)调用该方法。(2)mouseEntered(MouseEvent e)。处理鼠标指针进入一个组件的。处理鼠标指针进入一个组件的事件,即鼠标进入组件边界时将调用该方法。事件,即鼠标进入组件边界时将调用该方法。(3)mouseExited(MouseEvent e)。处理鼠标指针离开一个组件的。处理鼠标指针离开一个组件的事件,即鼠标离开组件边界时将调用该方法事件,即鼠标离开组件边界时将调用该方法(4)mousePressed(MouseEvent e)。鼠标光标位于组件上方时,。鼠标光标位于组件上方时,处理鼠标指针按钮事件,即按下鼠标按钮时将调用该方法。处理鼠标指针按钮事件,即按下鼠标按钮时将调用该方法。(5)mouseReleased(MouseEvent e)。处理鼠标释放的事件,即鼠。处理鼠标释放的事件,即鼠标释放时调用该方法,它发生在标释放时调用该方法,它发生在mousePressed方法调用之后。方法调用之后。MouseMotionListener接口的常用方法:接口的常用方法:(1)mouseMoved(MouseMotiomListener)。处理鼠标指针在组件。处理鼠标指针在组件上移动的事件,即鼠标光标位于组件上方时,并移动鼠标时将调用该方法。上移动的事件,即鼠标光标位于组件上方时,并移动鼠标时将调用该方法。(2)mouseDragged(MouseEvent e)。处理鼠标在组件拖动的事件,。处理鼠标在组件拖动的事件,即鼠标光标位于组件上方时,拖动时将调用该方法,它发生在即鼠标光标位于组件上方时,拖动时将调用该方法,它发生在mousePressed方法调用之后。方法调用之后。单元单元8 图形用户界面设计图形用户界面设计304.KeyEvent事件事件其事件监听接口其事件监听接口KeyListener包括三种方法:包括三种方法:(1)keyPressed(KeyEvent e)。当按下键盘的某个键时调用。当按下键盘的某个键时调用。(2)keyReleased(KeyEvent e)。当释放键盘上已被按下的某个键时调用。当释放键盘上已被按下的某个键时调用。(3)keyTyped(KeyEvent e)。当键按下并释放键盘的某个键时调用。当键按下并释放键盘的某个键时调用。5.TextEvent事件事件其监听器其监听器TextListener提供下面一个方法:提供下面一个方法:TextValueChanged(TextEvent e)。6.FocusEvent事件事件其监听器其监听器 FocusListener常用方法:常用方法:(1)focusGained(FocusEvent e)。该方法当组件获得焦点时调用。该方法当组件获得焦点时调用。(2)fousLost(FocusEvent e)。该方法当组件失去焦点时调用。该方法当组件失去焦点时调用。单元单元8 图形用户界面设计图形用户界面设计317.ComponentEvent事件事件其事件监听器其事件监听器ComponentListener的常用方法如下:的常用方法如下:(1)componentHidden(ComponentEvent e)。该方法在组件隐藏时调用。该方法在组件隐藏时调用。(2)componentMoved(ComponentEvent e)。该方法在组件移动时调用。该方法在组件移动时调用。(3)componentResized(ComponentEvent e)。该方法在组件改变大小时调用。该方法在组件改变大小时调用。(4)componentShown(ComponentEvent e)。该方法在组件变为可见时调用。该方法在组件变为可见时调用。8.ContainerEvent事件事件其事件监听接口其事件监听接口ContainerListener包括两种方法:包括两种方法:(1)componentAdded(ContainerEvent e)。在向容器内加入组件时调用。在向容器内加入组件时调用。(2)componentRemoved(ContainerEvent e)。在容器中移走组件时调用。在容器中移走组件时调用。9.ItemEvent事件事件其监听接口其监听接口ItemListener提供下面的方法:提供下面的方法:ItemStateChanged(ItemEvent e)。10.AdjustmentEvent事件事件其监听接口其监听接口AdjustmentListener提供方法:提供方法:adjustmentValueChanged(AdjustmentEvent e)。单元单元8 图形用户界面设计图形用户界面设计32【案例案例8-14】鼠标事件示例。鼠标事件示例。import java.awt.*; import java.awt.event.*;public class F14 extends MouseAdapter implements MouseListener static Frame f=new Frame( 鼠标事件示例鼠标事件示例 ); private Label l = new Label(,Label.CENTER); public F14() f.add( l, BorderLayout.NORTH ); f.addMouseListener( this ); f.setSize( 150, 150 );f.show(); public void mousePressed( MouseEvent e ) l.setText( 您按下了鼠标您按下了鼠标 ); public void mouseExited( MouseEvent e ) l.setText( 这是鼠标移出这是鼠标移出 ); public void mouseMoved( MouseEvent e ) l.setText( 您移动了鼠标您移动了鼠标 ); public void mouseClicked( MouseEvent e ) l.setText( 您单击了鼠标您单击了鼠标 ); public static void main( String args ) F14 a = new F14(); 程序运行的部分结果如图程序运行的部分结果如图8-19所示。所示。单元单元8 图形用户界面设计图形用户界面设计338.4 菜单系统的设计菜单系统的设计一个菜单系统由一个菜单条(菜单栏)、若干菜单、子菜单和若干菜单一个菜单系统由一个菜单条(菜单栏)、若干菜单、子菜单和若干菜单项组成。项组成。菜单系统分为下拉式菜单和弹出式菜单(快捷菜单)两类。菜单系统分为下拉式菜单和弹出式菜单(快捷菜单)两类。1.MenuBar MenuBar类用来创建一个菜单条,是一个菜单系统的总容器,它不支类用来创建一个菜单条,是一个菜单系统的总容器,它不支持监听事件。构造方法是:持监听事件。构造方法是:MenuBar()。2.MenuMenu类用来创建一个菜单,其构造方法有两种:类用来创建一个菜单,其构造方法有两种:(1)public Menu()。用来构造一个不带标签文字的菜单对象。用来构造一个不带标签文字的菜单对象。(2)public Menu(String s)。用来构造一个带标签。用来构造一个带标签s的菜单对象。的菜单对象。单元单元8 图形用户界面设计图形用户界面设计343.MenuItem构造方法:构造方法:(1)MenuItem()。用来构造一个不带标签和快捷键的菜单项对象。用来构造一个不带标签和快捷键的菜单项对象。(2)MenuItem(String s)。用来构造一个带标签。用来构造一个带标签s、无快捷键的菜单项对象。、无快捷键的菜单项对象。(3)MenuItem(String s,MenuShortcut s)。用来构造一个带标签。用来构造一个带标签s和快捷和快捷键的菜单项对象。快捷键一般形式为键的菜单项对象。快捷键一般形式为某字母某字母,例如例如N表示快捷键为表示快捷键为Alt+N。4.CheckboxMenuItem构造方法:构造方法:(1)public CheckboxMenuItem()。用来构造一个无标签对象。用来构造一个无标签对象。(2)public CheckboxMenuItem(String s)。用来构造一个带标签。用来构造一个带标签s对象。对象。(3)public CheckboxMenuItem(String s,Boolean b)。b为为true表示选表示选中,中,b为为false表示未选中。表示未选中。5.PopupMenu构造方法:构造方法:(1)public PopupMenu()。用来构造一个无标签的弹出式菜单对象。用来构造一个无标签的弹出式菜单对象。(2)public PopupMenu(String s)。构造一个带标签。构造一个带标签s的弹出式菜单对象。的弹出式菜单对象。单元单元8 图形用户界面设计图形用户界面设计35 8.4.2 菜单系统的实现方法与步骤菜单系统的实现方法与步骤先建立一个容器和一个菜单栏先建立一个容器和一个菜单栏,并调用容器的并调用容器的setMen