图形用户界面设计.ppt

上传人:牧羊曲112 文档编号:5341500 上传时间:2023-06-27 格式:PPT 页数:107 大小:2.71MB
返回 下载 相关 举报
图形用户界面设计.ppt_第1页
第1页 / 共107页
图形用户界面设计.ppt_第2页
第2页 / 共107页
图形用户界面设计.ppt_第3页
第3页 / 共107页
图形用户界面设计.ppt_第4页
第4页 / 共107页
图形用户界面设计.ppt_第5页
第5页 / 共107页
点击查看更多>>
资源描述

《图形用户界面设计.ppt》由会员分享,可在线阅读,更多相关《图形用户界面设计.ppt(107页珍藏版)》请在三一办公上搜索。

1、图形用户界面设计,Java的图形用户界面,2,主要内容,Java的GUI简介 自定义图形设计图形、文字、图象 Java的标准组件容器和组件GUI的布局 事件处理,Java的图形用户界面,3,图形用户界面(GUI),字符界面用字符串、命令行的方式与用户交互图形用户界面:Graphics User Interface用直观的图形来表示数据用直观、方便的GUI标准组件来接收命令GUI组成成分的标准化使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,来帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形的方式显示给用户。,Java的图形用户界面,4,用户界面设计原则,控制权在

2、用户界面与操作的风格一致性宽容(容错)性简洁与美观并重,Java的图形用户界面,5,图形用户界面简介,图形用户界面的构成容器:布局、安排标准组件用户自定义成分设计&实现图形用户界面的工作创建GUI各组成成分,并安排从属位置关系,根据具体需要对其进行排序,构成完整外观。定义GUI各成分对不同事件的响应,实现与用户的交互功能。,Java的图形用户界面,6,界面构成,容器,用户自定义成分,容器是用来组织其他界面成分和元素的单元。一般一个图形用户界面对应一个复杂容器。如一窗口标准组件是图形用户界面的最小单位,它里面不再包含其他的成分。如单选按钮,文本框,菜单用户自定义成分是指编程人员根据用户需要设计一

3、些用户自定义的图形界面成分。如绘制几何图形,标准组件,Java的图形用户界面,7,界面元素,容器是用来组织其他界面成分和元素的单元。可以形成容器的层次,构筑复杂结构Window(Frame、Applet、Dialog)组件是图形用户界面的基本单位,它里面不再包含其他的成分。GUI组件是图形用户界面标准化的结果。常用的组件有:选择类的:单选按钮、复选按钮、下拉列表;文字处理类的:文本框、文本区域 命令类的:按钮、菜单等GUI组件的作用是完成与用户的交互。包括接收用户的命令、文本或选择输入,向用户显示一段文本或一个图形等。,Java的图形用户界面,8,界面元素,使用组件通常需要如下的步骤创建某组件

4、类的对象,指定其大小等属性。使用某种布局策略,将该组件对象加入到某个容器中的某指定位置处。将该组件对象注册给它所能产生的事件对应的事件监听者,重载事件的处理方法,实现利用该组件对象与用户交互的功能。用户自定义成分显示文字、绘制图形、显示图象不能像标准组件一样被系统识别和承认,只起装饰作用。不能响应用户的动作,不具有交互功能。,Java的图形用户界面,9,图形用户界面(GUI),Java的图形用户界面编程:为方便图形用户界面的开发,设计了专门的类库 来生成各种标准图形界面元素和处理图形界面的 各种事件,这个用来生成图形界面的类库就是java.awt包。AWT是abstract window to

5、olkit抽象窗 口工具集的缩写。AWT类库中的各种操作被定义在一个窗口中进行,开发人员用AWT开发出的图形用户界面可以适用于所有的平台系统。,Java的图形用户界面,10,AWT包,Abstract Window Toolkit(抽象窗口工具集)提供各种构成GUI的标准构件。AWT类库中的各种操作被定义在一个窗口中进行的。抽取不同软硬件平台中所实现的窗口的公共特性。依赖于具体平台系统实现:显示效果可能不同。提供与机器无关的基本GUI标准组件选择类组件:单选按钮、复选框、下拉选单、列表框文字处理类组件:标签、文本框、编辑框。命令类组件:按钮、工具栏、菜单等。,Java的图形用户界面,11,从一

6、个简单窗口开始,创建GUI应用程序Frame必不可少 它是带标题的顶层窗口,是构建应用程序图形界面的基础,它为应用程序实现人机交互提供了对话窗口先来建一个空的窗口应用:Empty.java注意:一定要处理关闭窗口的事件,Java的图形用户界面,12,import java.awt.*;/must import to use GUI/must extends Frame in an applicationpublic class Empty extends Frame/暂时采用1.0.2的事件处理方法,关闭窗口 public boolean handleEvent(Event evt)/根据Ev

7、ent类中参数evt的id值来判断发生事件的种类 if(evt.id=Event.WINDOW_DESTROY)System.exit(0);/return的返回值表示将余下的事件处理交给handleEvent()的父/类处理,从而保证对事件的正常处理 return super.handleEvent(evt);public static void main(String args)Frame f=new Empty();f.setSize(300,200);f.setVisible(true);,Java的图形用户界面,13,绘制用户自定义成分,用户自定义成分属于构成GUI的非标准部分无法响

8、应用户事件一般仅仅起背景装饰、输出效果突出的作用Java中的用户自定义成分显示文字绘制图形显示图片,Java的图形用户界面,14,绘制用户自定义成分,一般在容器中(窗口)或画布上绘制。利用Java.awt类库中的类及其方法绘制用户自定义的图形界面成分。Graphics类包含很多绘制图形和文字的方法。首先要获得Graphics类的实例,然后利用其方法绘制。Graphics类的实例一般作为相关方法的参数传递进来:paint(Graphics g)Java程序图形界面的 坐标设置,Java的图形用户界面,15,绘制图形及其相关方法,drawLine(x1,y1,x2,y2)/直线drawRect(x

9、,y,w,h)/矩形drawOval(x,y,w,h)/圆或椭圆fillOval(x,y,w,h)/实心圆或椭圆drawPolygon(X坐标数组,Y坐标数组,顶点个数)/画多边形drawArc(x,y,w,h,开始角度,弧度角度)setColor(Color c)/设置颜色setFont(Font f)/设置字体getColor()getFont(),Java的图形用户界面,16,绘制图形及其相关方法,从(x1,y1)到(x2,y2)画直线drawLine(x1,y1,x2,y2)参数均为int画弧线drawArc(x,y,w,h,)参数均为intx,y为绘制弧形的左上角的坐标;w,h为弧形

10、的宽度和高度;为弧形的起始角,为弧形的弧度,为正,表顺时针方向;为负,表逆时针方向。以(x,y)为左上角、w为宽度、h为高度画矩形drawRect(x,y,w,h)参数均为intfillRect(x,y,w,h)、clearRect(x,y,w,h),Java的图形用户界面,17,绘制图形及其相关方法,画圆或椭圆drawOval(x,y,w,h)x,y为绘制圆或椭圆的左上角的坐标,w,h确定了 椭圆的宽度和高度画实心圆或椭圆fillOval(x,y,w,h)画多边形drawPolygon(X坐标数组,Y坐标数组,顶点个数)P.185,Java的图形用户界面,18,绘制图形及其相关方法,例子:s

11、anmao.java,Java的图形用户界面,19,/画头部,椭圆方法drawOvalg.setColor(Color.black);/setColor用来设置要使用的颜色 g.drawOval(40,40,120,150);./画头发,直线方法drawLine,画弧方法drawArcg.drawLine(100,10,100,60);g.drawArc(110,20,100,80,90,90);./画嘴巴,填充画弧方法fillArcg.fillArc(60,130,80,40,180,180);./画耳朵,填充椭圆方法fillOval,复制图形方法copyAreag.fillOval(25,

12、92,15,30);g.copyArea(25,92,15,30,136,0);/拷贝某区域的图形至另一区域./画身体,多边形方法fillPolygong.fillPolygon(polygon_x,polygon_y,polygon_pt_num);,Java的图形用户界面,20,显示文字,字体显示效果类:Font 一个Font类的对象表示了一种字体显示效果,包括字体类型、风格和字号。Font mf=new Font(String 字体,int 风格,int 字号);字体:TimesRoman,Courier,Arial等风格:三个常量Font.PLAIN,Font.BOLD,Font.IT

13、ALIC字号:字的大小(磅数)设置当前使用的字体:setFont(Font fn)获取当前使用的字体:getFont()例:UseFonts.java,Java的图形用户界面,21,String FontName=TimesRoman,Courier,Arial;int FontStyle=Font.PLAIN,Font.BOLD,Font.ITALIC;String StyleName=PLAIN,BOLD,ITALIC;public void paint(Graphics g)for(int i=0;i3;i+)for(int j=0;j3;j+)/set a new font and d

14、raw a string with the new font g.setFont(new Font(FontNamei,FontStylej,12);g.drawString(ABEXYZ+FontNamei+StyleNamej,10,20*(i*3+j+2);/end of paint,Java的图形用户界面,22,paint()与update(),某组件的paint()和 update()为系统自动调用的有关图 形绘制的方法,不可人为编程调用;但可编程重新 定义其操作内容使用repaint()方法可以触发update()方法,Java的图形用户界面,23,显示图象,图形与图象,java支

15、持gif和jpeg格式保存二进制图象的java.awt.Image类获取Image对象的方法getImage(图象文件所在的URL)getImage(图象文件所在的URL,图象文件名)Applet类以及java.awt.Toolkit中均有方法的定义注意:在application中只能使用Toolkit,而在Applet中,两者均可使用,Java的图形用户界面,24,显示图象,在applet小程序中,可使用Applet类的getImage方法获得图象。Image ig=getImage()而在application中就只能使用ToolKit类的getImage方法:Image ig=getTo

16、olkit().getImage(“文件名”);然后用Graphics类的drawImage方法显示Image对象。,Java的图形用户界面,25,显示图象,显示图象的方法 drawImage(Image 对象,x,y,背景色,ImageObserver);java.awt.Graphics类中定义了此方法第一个参数是保存图像数据的Image对象。第二、三个参数是图像的左上角坐标,它们决定了图像在容器中的显示位置。ImageObserver为一个接口,java的组件类实现了此接口,此处可理解为观察/显示Image对象容器,编程时一般可使用this,用于提示图象是否加载完成,Java的图形用户界

17、面,26,显示图象,表示颜色的类Color 显示的字符串或图形的颜色可以用Color类的对象来控制,每个Color 对象代表一种颜色,用户可以直接使用Color类中定义好的颜色常量,也可以通过调配红、绿、蓝三色的比例创建自己的Color对象Color(red,green,blue)来创建非缺省色调用Graphics对象的setColor()方法可把当前的缺省颜色改成新建的颜色 Color blueColor=new Color(0,0,255);g.setColor(blueColor);P.189,Java的图形用户界面,27,Color类,构造方法1(设置颜色)Color c=new Co

18、lor(intred,intgreen,intblue)范围:0255 new Color(200,200,200)new Color(255,0,100)构造方法2 Color c=new Color(floatred,float green,float blue)范围:0.0 1.0Color类定义了13种颜色常量值 Color.black,Color.blue,Color.gray,Color.red.对GUI的组件有四种与颜色相关的方法来设置和获取其背景色和前景色:setBackground(Color c);getBackground();setForeground();getFor

19、eground();,Java的图形用户界面,28,例:DrawMyImage.java public class DrawMyImage extends Frame/获得Toolkit实例的方法getDefaultToolkit()Toolkit toolkit=Toolkit.getDefaultToolkit();Image myImage;public DrawMyImage()/获得Image对象,图象文件在当前目录下时 myImage=toolkit.getImage(Invntory.gif);/在paint方法中绘制图象 public void paint(Graphics g

20、)g.drawImage(myImage,0,40,Color.orange,this);.,Java的图形用户界面,29,GUI标准组件概述,构建程序的图形用户界面的主要任务有两个创建各界面组件并排列成图形用户界面的外观定义这些组件对不同事件的影响从而完成图形用户界面功能组成图形用户界面的成分有三类用户自定义类容器:是能够容纳并排列其他组件的对象组件:放置在容器中的对象在Java中,容器和组件是由AWT包中的对象来代表,这些对象间的层次关系如下图:,Java的图形用户界面,30,AWT类层次关系图,Java的图形用户界面,31,GUI标准组件概述,基本组件被安放在容器中的某位置,用来完成一种

21、具体的与用户交互的功能,使用基本组件一般包括如下的步骤创建某种基本组件类的新对象,指定该对象的属性 比如:外观、大小等将该组件对象加入到某个容器的合适位置创建该组件对象的监听者,即实现以该组件为事件源的事件对应的监听者接口,也可以使现有的类实现该接口成为监听者。将该组件对象注册给此监听者,并在监听者内部实现监听者接口中定义的方法,对该组件可能引发的事件加以处理,定义新加入组件对象的交互性界面功能。比如:接收用户输入的文本、在屏幕显示输出等,Java的图形用户界面,32,GUI标准组件,Component:所有组件和容器的抽象父类显示功能:paint(),update(),repaint()显示

22、效果控制:字体、颜色、位置、尺寸图象处理:一般利用Canvas和Container来显示图像事件处理机制(java 1.1):addXXXListener()removeXXXListener(),Java的图形用户界面,33,Component类,可显示在屏幕上的图形对象,可与用户交互。是所有组件和容器的抽象父类,其中定义了一些每个 容器和组件都可能用到的方法。add(PopupMenupopup)在组件上加入一弹出菜单addFocusListener(FocusListenerl)将发生在本组件上的事件注册给监听者,以进行事件处理。setSize(intwidth,intheight)设置

23、组件尺寸repaint(int x,int y,intwidth,intheight)重画组件setFont(Fontf)设置组件字体setBackground(Colorc)设置组件背景色setVisible(boolean b)设置组件是否可见,Java的图形用户界面,34,GUI标准组件,简单构件:人机交互的基本工具(控制)Button,Checkbox,Label等TextComponent(TextArea,TextField)Canvas复杂构件:Container(安放排列其他构件的容器)PanelWindow,Java的图形用户界面,35,Container(容器),排列其中包

24、容的构件定位布局策略 set/getLayout()包容其他基本构件增加构件:add()删除构件:remove()控制是否显示容器及其中组件setVisible(true/false),Java的图形用户界面,36,Container容器组件,Window 无边框、菜单的空白窗口。不需要其他组件支撑,独立显示。Frame:用于Application,含边框、标题和菜单的独立窗口Dialog:依赖于 Frame的非独立窗口。没有菜单条,不能 改变大小。Panel(面板)属于无边框容器。必须放在Window组件中(或Web浏览器窗口)才能显示。它为一矩形区域,在其中可摆放其他组件,可以有自己的布局

25、管理器。无边框容器包括Panel和Applet。其中Applet为Panel的子类基本方法add(Component comp)将指定组件放到容器中getComponent(int index)获取指定序号的组件remove(Componentcomp)删除指定组件setLayout(LayoutManagermgr)设置容器布局,Java的图形用户界面,37,容器的组件布局,布局管理器(layout manager)用于控制组件在容器中的布局负责确定组件在容器中的位置和大小。调用容器的setLayout(布局管理器对象)方法,为容器指定某种布局。当容器需要定位组件和确定组件大小时,就会给布局

26、管理器对象发消息,让它完成该项工作。直接管理组件调用容器的 setLayout(null)方法,关闭布局管理器。调用每一个组件的setLocation()方法决定组件位置。调用每一个组件的setSize()方法决定其大小。,Java的图形用户界面,38,布局管理器种类,在Java的GUI界面设计中,布局控制是通过为容器设置布局编辑器来实现的。Java.awt包中共定义了五种布局编辑类,每一个布局编辑类对应一种布局策略:FlowLayout:组件在一行中按加入的先后顺序从左至右水平排列,排满后折行,每行中的组件都居中排列。BorderLayout:把容器空间划分为北、南、西、东、中五个区,每加入

27、一个组件都应说明把这个组件加在那个区 域中。CardLayout:每一个组件作为一个卡片,容器仅显示多个卡片中 的某一个GridLayout:以行和列的网格形式安排组件GridBagLayout:更复杂、功能更强的网格布局,Java的图形用户界面,39,确定容器布局,缺省的布局管理器Window、Frame、Dialog BorderLayout:缺省的窗口容器的管理器Panel、Applet FlowLayout:缺省的Panel布局管理器选择布局管理器的方法建立布局管理器类的对象利用容器的 setLayout 为容器指定布局(即指定一个布局管理器的对象),Java的图形用户界面,40,确定

28、容器布局,改变缺省布局管理器的方法;例:BorderLayout B=new BorderLayout();C1.setLayout(B);or C1.setLayout(new BorderLayout();例:将myFrame布局设定为FlowLayout类型 myFrame.setLayout(new FlowLayout();,Java的图形用户界面,41,Frame,Frame(String title)构造一个新的不可见的frame隐含的布局管理器是:BorderLayoutsetLayout()设置新的布局管理器。add(Componentcomp)在容器上增加一个组件(在容器为

29、不可见的状态时加)。void setSize(intwidth,intheight)设置组件大小 setVisible(true)设置组件可见,Java的图形用户界面,42,Frame Panel,Frame fm1=new Frame(Hello);fm1.setSize(400,350);fm1.setBackground(Color.gray);fm1.setLayout(null);Panel pn1=new Panel();pn1.setSize(100,100);pn1.setBackground(Color.red);pn1.setLocation(0,50);fm1.add(p

30、n1);fm1.setVisible(true);,Java的图形用户界面,43,FlowLayout布局管理器,构造方法:FlowLayout();FlowLayout(int align,int hgap,int vgap);align:对齐方式:LEFT CENTER RIGHThgap:组件水平间距(象素)vgap:组件垂直间距无参数的构造方法创建的FlowLayout对象,其对齐方式为CENTER居中方式,组件间的横纵间距都为5个像素。,Java的图形用户界面,44,FlowLayout布局管理器,Frame f=new Frame(FlowLayout);f.setSize(400

31、,300);/不起作用 f.setBackground(Color.gray);f.setLayout(new FlowLayout(FlowLayout.LEFT,10,20);b1=new Button(button1);b2=new Button(button2);b3=new Button(button3);f.add(b1);f.add(b2);f.add(b3);f.setVisible(true);f.pack();/询问布局管理器窗体大小,Java的图形用户界面,45,BorderLayout布局管理器,setLayout(new BorderLayout()add(b1,Bo

32、rderLayout.NORTH);当容器大小改变,组件相对位置不会改变。,Java的图形用户界面,46,BorderLayout布局管理器,f=new Frame(BorderLayout);f.setSize(200,200);b1=new Button(button1);b5=new Button(button5);f.add(b1,BorderLayout.NORTH);f.add(b2,BorderLayout.SOUTH);f.add(b3,BorderLayout.WEST);f.add(b4,BorderLayout.EAST);f.add(b5,BorderLayout.CE

33、NTER);f.setVisible(true);,Java的图形用户界面,47,Border-Panel,class MyFrame extends Frame MyFrame()Button b1=new Button(1);Button b2=new Button(2);Button b3=new Button(3);Button b4=new Button(4);Panel p=new Panel();p.add(b1);p.add(b2);add(p,BorderLayout.NORTH);add(b3,BorderLayout.WEST);add(b4,BorderLayout.C

34、ENTER);pack();setVisible(true);,Java的图形用户界面,48,GridLayout布局管理器,创建GridLayout对象作为布局编辑器,指定划分网格的 行数和列数(网格大小一样)。setLayout(new GridLayout(行数,列数);setLayout(new GridLayout(行数,列数,行间隔,列间隔);调用容器的方法add()将组件加入容器,组件填入容器 的顺序将按照第一行第一个、第一行第二个、每个网格中都必须填入组件,如果希望某个网格为空白,可以为它加入一个空的标签:add(new Label();,Java的图形用户界面,49,Grid

35、Layout布局管理器,f=new Frame(GridLayout);f.setLayout(new GridLayout(2,3);f.setSize(200,100);f.setBackground(Color.gray);b1=new Button(1);b6=new Button(6);f.add(b1);f.setVisible(true);,Java的图形用户界面,50,布局例,Frame fm=new Frame()fm.setLayout(new FlowLayout();tf=new TextField(22);fm.add(tf);Panel p1=new Panel()

36、;p1.setLayout(new GridLayout(4,3);p1.add();Panel p2=new Panel();p2.setLayout(new GridLayout(4,3);p2.add();fm.add(p1);fm.add(p2);,Java的图形用户界面,51,GridBagLayout布局管理器,每个GridBagLayout对象维护一个动态矩形网格,每个组件可占据一个或多个单元作为它的显示区域。每一个组件都与一个GridBagConstraints类的实例相连,以指定在显示区域中如何摆放,并可确定大小。步骤:setLayout(new GridBagLayout(

37、);GridBagConstraints gbc=new GridBagConstraints();gbc.gridx=0;(属性赋值)add(button1,gbc),Java的图形用户界面,52,GridBagLayout布局管理器,设置GridBagConstraints类实例属性值:gridx gridy 组件显示区域的左上角单元格坐标gridwidth gridheight 指定显示区域行、列单元数RELATIVE 紧挨着前一个组件摆放fill 当显示区域大于组件时如何扩充组件:HORIZONTAL 水平充满 VERTICAL 垂直充满 BOTH 全部填充 NONE 不调整(隐含)i

38、padx ipady 指定组件间最小间隔 anchor 当显示区域大于组件时如何摆放组件(对齐方式)CENTER(隐含),NORTH,EAST,SOUTH,WEST,SOUTHEAST,NORTHEAST,SOUTHWEST,NORTHWEST.,Java的图形用户界面,53,CardLayout布局管理器,使用CardLayout的容器表面可以容纳多个组件,将每 一个组件视为一张卡片,同一时刻只能显示一个组件。setLayout(new CardLayout()CardLayout方法(按序指定组件)first(Containerparent)显示第一个版面的内容last(Container

39、parent)显示最后一个版面的内容previous(Containerparent)显示前一个版面的内容next(Containerparent)显示下一个版面的内容CardLayout方法(按名显示组件)addLayoutComponent(Stringname,Componentc)show(Containerparent,Stringname),Java的图形用户界面,54,利用AWT创建自己的GUI,GUI外观设计设计标准构件层次关系:构件层次结构关系树设置容器布局策略:setLayout()生成标准构件向容器中添加组成构件:add()方法构件事件处理例:AWTComponent.j

40、ava,Java的图形用户界面,55,public class AWTComponent extends Frame.public AWTComponent()setSize(450,300);/设置Frame大小setLayout(new FlowLayout();/设置布局./创建组件Group1=new CheckboxGroup();/创建单选按钮组radioButton1=new Checkbox(male,Group1,false);add(radioButton1);/把组件加入容器radioButton2=new Checkbox(female,Group1,false);ad

41、d(radioButton2);.setVisible(true);/显示容器及组件.,还缺什么吗?,Java的图形用户界面,56,的事件处理,使用单一的java.awt.Event类来接受所有类型的事件;使用action(),handleEvent()以及其他的一些事件处理方法(如鼠标事件、键盘事件、焦点事件)来进行相应事件的事件处理。缺点:造成长if分支语句组,不利于面向对象的编程,Java的图形用户界面,57,Java1.1 对事件处理的改进,引入java.awt.event包更加面向对象,易于理解定义了事件的“发生者”和“监听者”对象 按钮事件、文本事件、选择事件、调整事件、鼠标事件、

42、键盘事件等事件以类层次来表达,取代了1.0.2中的单一的 类,并可以自定义事件类型,Java的图形用户界面,58,事件及处理机制,用户操作GUI组件时会引发各种事件。事件:描述“发生了什么事情”的对象。系统根据用户的操作构造出相应事件类的对象。事件源:事件的产生地。事件处理程序:是一个方法,它接收一个事件对象、分析它、并完成对该事件的处理。每个事件有一个相应的监听者接口,它规定了能够接收(并处理)该类事件的方法的规范。监听者:实现了监听者接口的类,它包含有事件处理 程序。编程人员要为事件源指定监听者对象(即指定处理某种事件的事件处理程序)。,Java的图形用户界面,59,事件处理机制,组件(事

43、件发生者)触发一个相应类型的事 件此事件由相应类型的Listener(事件监听者)接收并处理,Java的图形用户界面,60,事件及处理机制,调用按扭的 addActionListener()方法,为该按扭指定监听者。,Java的图形用户界面,61,几个有用的概念,事件 在java.awt.event包中定义了若干类型 的事件类监听者接口 特定类型的Listener接口,用于 监听特定类型的事件监听者类 是实现了某种监听者接口的类,由编程者定义事件监听者 是某个监听者类的对象,由编 程者使用new创建,Java的图形用户界面,62,实现步骤,根据需要定义相应类型的监听者类,在类的 定义中完成事件

44、的处理(建议使用inner class 定义);创建事件监听者对象;为将会触发事件的组件C注册相应的事件监听 者对象(使用C的addXXXListener()方法)。例:ButtonAct.java,Java的图形用户界面,63,public class ButtonAct extends Frame.public ButtonAct()./为b1注册事件监听者B1b1.addActionListener(new B1();add(b1);./利用inner class结构定义监听者类 class B1 implements ActionListener/利用actionPerformed方法

45、进行事件处理public void actionPerformed(ActionEvent e)who.setText(Button 1);./:,Java的图形用户界面,64,事件与监听者类型,XXXListener接口与XXXEventXXX为特定类型常用类型:Action,Focus,Key,Window,MouseEvent vs.Mouse/MouseMotionListener注册与取消:组件包含的新方法 addXXXListener()与removeXXXListener()参考:eventtables.html,Java的图形用户界面,65,监听者接口中有什么?,每种Liste

46、ner接口均定义了一套abstract方法,编程者必须在监听者类中实现这些方法来做事 件处理;例:ActionListener:actionPerformed()WindowListener:windowOpened/Closing/Closed/Activated/Deactivated/Iconified/Deiconified(),Java的图形用户界面,66,使用Listener Adapter,由于接口中的方法为abstract方法,所以在监听者类中要实现所有的方法,较为烦琐。为了简化编程,引入了Adapter。具有两个以上方法的监听者接口均对应一个XXXAdapter类,提供了接口

47、中每个方法的缺省实现。,Java的图形用户界面,67,使用Listener Adapter(续),例:class MyWindowListener extends WindowAdapter public void windowClosing(WindowEvent e)System.exit(0);参考:Listener.html例:DoubleClick.java(相应鼠标事件),Java的图形用户界面,68,public class DoubleClick extends Frame Vector m_vLocs;/保存鼠标单击过的各点,用以绘制各点连线 Point m_CursorLo

48、c;/跟踪当前鼠标位置,用以绘制十字光标 public DoubleClick()m_vLocs=new Vector();m_CursorLoc=new Point(100,100);setSize(400,400);/为Frame注册3个事件监听者addMouseListener(new click();addMouseMotionListener(new move();addWindowListener(new wd();public void paint(Graphics g)/绘制十字光标,连接各点,Java的图形用户界面,69,class click extends MouseAd

49、apter/鼠标事件监听者类public void mouseClicked(MouseEvent e)/响应点击 if(e.getClickCount()1)/双击时清除向量中各点m_vLocs.removeAllElements();else/单击时在向量中增加一点m_vLocs.addElement(e.getPoint();repaint();/重新绘制一次 class move extends MouseMotionAdapter/鼠标移动监听者类public void mouseMoved(MouseEvent e)/响应移动 m_CursorLoc=new Point(e.get

50、X(),e.getY();repaint();/重新绘制一次,Java的图形用户界面,70,事件类,ActionEvent类:属于动作事件,包括:点击按钮;双击一个列表中的选项;选择菜单项;在文本框中按回车。最典型的例子是:鼠标点击按钮所产生的事件,经ActionListener接口触发一连串动作,再由actionPerformed()方法完成这些动作。e.getSource()返回事件发生的对象(名)e.getActionCommand()返回按扭名(动作事 件的命令字符串)。ActionListener 接口public void actionPerformed(ActionEvent e

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号