版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图形用户界面设计1主要内容Java的GUI简介自定义图形设计图形、文字、图象Java的标准组件容器和组件GUI的布局事件处理2图形用户界面〔GUI〕字符界面用字符串、命令行的方式与用户交互图形用户界面:GraphicsUserInterface用直观的图形来表示数据用直观、方便的GUI标准组件来接收命令GUI组成成分的标准化使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,来帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形的方式显示给用户。3用户界面设计原那么控制权在用户界面与操作的风格一致性宽容〔容错〕性简洁与美观并重4图形用户界面简介图形用户界面的构成容器:布局、安排标准组件用户自定义成分设计&实现图形用户界面的工作创立GUI各组成成分,并安排附属位置关系,根据具体需要对其进行排序,构成完整外观。定义GUI各成分对不同事件的响应,实现与用户的交互功能。5界面构成容器用户自定义成分容器是用来组织其他界面成分和元素的单元。一般一个图形用户界面对应一个复杂容器。如一窗口标准组件是图形用户界面的最小单位,它里面不再包含其他的成分。如单项选择按钮,文本框,菜单用户自定义成分是指编程人员根据用户需要设计一些用户自定义的图形界面成分。如绘制几何图形标准组件6界面元素容器是用来组织其他界面成分和元素的单元。可以形成容器的层次,构筑复杂结构Window〔Frame、Applet、Dialog〕组件是图形用户界面的根本单位,它里面不再包含其他的成分。GUI组件是图形用户界面标准化的结果。常用的组件有:选择类的:单项选择按钮、复选按钮、下拉列表;文字处理类的:文本框、文本区域命令类的:按钮、菜单等GUI组件的作用是完成与用户的交互。包括接收用户的命令、文本或选择输入,向用户显示一段文本或一个图形等。7界面元素使用组件通常需要如下的步骤创立某组件类的对象,指定其大小等属性。使用某种布局策略,将该组件对象参加到某个容器中的某指定位置处。将该组件对象注册给它所能产生的事件对应的事件监听者,重载事件的处理方法,实现利用该组件对象与用户交互的功能。用户自定义成分显示文字、绘制图形、显示图象…不能像标准组件一样被系统识别和成认,只起装饰作用。不能响应用户的动作,不具有交互功能。8图形用户界面〔GUI〕Java的图形用户界面编程:为方便图形用户界面的开发,设计了专门的类库来生成各种标准图形界面元素和处理图形界面的各种事件,这个用来生成图形界面的类库就是java.awt包。AWT是abstractwindowtoolkit抽象窗口工具集的缩写。AWT类库中的各种操作被定义在一个窗口中进行,开发人员用AWT开发出的图形用户界面可以适用于所有的平台系统。9AWT包AbstractWindowToolkit(抽象窗口工具集)提供各种构成GUI的标准构件。AWT类库中的各种操作被定义在一个窗口中进行的。抽取不同软硬件平台中所实现的窗口的公共特性。依赖于具体平台系统实现:显示效果可能不同。提供与机器无关的根本GUI标准组件选择类组件:单项选择按钮、复选框、下拉选单、列表框文字处理类组件:标签、文本框、编辑框。命令类组件:按钮、工具栏、菜单等。10从一个简单窗口开始创立GUI应用程序Frame必不可少它是带标题的顶层窗口,是构建应用程序图形界面的根底,它为应用程序实现人机交互提供了对话窗口先来建一个空的窗口应用:Empty.java注意:一定要处理关闭窗口的事件11importjava.awt.*;//mustimporttouseGUI//mustextendsFrameinanapplicationpublicclassEmptyextendsFrame{//暂时采用1.0.2的事件处理方法,关闭窗口
publicbooleanhandleEvent(Eventevt){
//根据Event类中参数evt的id值来判断发生事件的种类
if(evt.id==Event.WINDOW_DESTROY) System.exit(0);
//
return的返回值表示将余下的事件处理交给handleEvent()的父
//类处理,从而保证对事件的正常处理
returnsuper.handleEvent(evt);}publicstaticvoidmain(String[]args){ Framef=newEmpty(); f.setSize(300,200); f.setVisible(true);}}12绘制用户自定义成分用户自定义成分属于构成GUI的非标准局部无法响应用户事件一般仅仅起背景装饰、输出效果突出的作用Java中的用户自定义成分显示文字绘制图形显示图片13绘制用户自定义成分一般在容器中(窗口)或画布上绘制。利用Java.awt类库中的类及其方法绘制用户自定义的图形界面成分。Graphics类包含很多绘制图形和文字的方法。首先要获得Graphics类的实例,然后利用其方法绘制。Graphics类的实例一般作为相关方法的参数传递进来:
paint(Graphicsg)Java程序图形界面的坐标设置原点(0,0)X轴Y轴14绘制图形及其相关方法drawLine(x1,y1,x2,y2)//直线drawRect(x,y,w,h)//矩形drawOval(x,y,w,h)//圆或椭圆fillOval(x,y,w,h)//实心圆或椭圆drawPolygon(X坐标数组,Y坐标数组,顶点个数)//画多边形drawArc(x,y,w,h,开始角度,弧度角度)setColor(Colorc)//设置颜色setFont(Fontf)//设置字体getColor()getFont()15绘制图形及其相关方法从(x1,y1)到(x2,y2)画直线drawLine(x1,y1,x2,y2)参数均为int画弧线drawArc(x,y,w,h,,)参数均为intx,y为绘制弧形的左上角的坐标;w,h为弧形的宽度和高度;为弧形的起始角,为弧形的弧度,为正,表顺时针方向;为负,表逆时针方向。以(x,y)为左上角、w为宽度、h为高度画矩形drawRect(x,y,w,h)参数均为intfillRect(x,y,w,h)、clearRect(x,y,w,h)16绘制图形及其相关方法画圆或椭圆drawOval(x,y,w,h)x,y为绘制圆或椭圆的左上角的坐标,w,h确定了椭圆的宽度和高度画实心圆或椭圆fillOval(x,y,w,h)画多边形drawPolygon(X坐标数组,Y坐标数组,顶点个数)
P.18517绘制图形及其相关方法例子:
sanmao.java18
//画头部,椭圆方法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,92,15,30);g.copyArea(25,92,15,30,136,0);//拷贝某区域的图形至另一区域 ……...//画身体,多边形方法fillPolygong.fillPolygon(polygon_x,polygon_y,polygon_pt_num);19显示文字字体显示效果类:Font一个Font类的对象表示了一种字体显示效果,包括字体类型、风格和字号。Fontmf=newFont(String字体,int风格,int字号);字体:TimesRoman,Courier,Arial等风格:三个常量Font.PLAIN,Font.BOLD,Font.ITALIC字号:字的大小〔磅数〕设置当前使用的字体:setFont(Fontfn)获取当前使用的字体:getFont()例:UseFonts.java20StringFontName[]={"TimesRoman","Courier","Arial"};intFontStyle[]={Font.PLAIN,Font.BOLD,Font.ITALIC};StringStyleName[]={"PLAIN","BOLD","ITALIC"};publicvoidpaint(Graphicsg){for(inti=0;i<3;i++){ for(intj=0;j<3;j++){//setanewfontanddrawastringwiththenewfont g.setFont(newFont(FontName[i],FontStyle[j],12)); g.drawString("ABEXYZ "+FontName[i]+""+ StyleName[j],10,20*(i*3+j+2)); }}}//endofpaint21paint()与update()某组件的paint()和
update()为系统自动调用的有关图形绘制的方法,不可人为编程调用;但可编程重新定义其操作内容使用repaint()方法可以触发update()方法paint()当某些操作破坏了显示,需重新绘制时第一次绘制repaint()编程控制1.擦除并填充成背景色2.调用paint()update()调用22显示图象图形与图象,java支持gif和jpeg格式保存二进制图象的类获取Image对象的方法getImage(图象文件所在的URL)getImage(图象文件所在的URL,图象文件名)Applet类以及中均有方法的定义注意:在application中只能使用Toolkit,而在Applet中,两者均可使用23显示图象在applet小程序中,可使用Applet类的getImage方法获得图象。Imageig=getImage(…)而在application中就只能使用ToolKit类的getImage方法:Imageig=getToolkit().getImage(“文件名〞);然后用Graphics类的drawImage方法显示Image对象。24显示图象显示图象的方法
drawImage(Image对象,
x,y,背景色,ImageObserver);类中定义了此方法第一个参数是保存图像数据的Image对象。第二、三个参数是图像的左上角坐标,它们决定了图像在容器中的显示位置。ImageObserver为一个接口,java的组件类实现了此接口,此处可理解为观察/显示Image对象容器,编程时一般可使用this,用于提示图象是否加载完成25显示图象表示颜色的类Color显示的字符串或图形的颜色可以用Color类的对象来控制,每个Color对象代表一种颜色,用户可以直接使用Color类中定义好的颜色常量,也可以通过调配红、绿、蓝三色的比例创立自己的Color对象Color(red,green,blue)来创立非缺省色调用Graphics对象的setColor()方法可把当前的缺省颜色改成新建的颜色ColorblueColor=newColor(0,0,255);g.setColor(blueColor); P.18926Color类构造方法1〔设置颜色〕Colorc=newColor(int
red,int
green,int
blue)范围:0~255newColor(200,200,200)newColor(255,0,100)构造方法2Colorc=newColor(float
red,float
green,float
blue)范围:0.0~1.0Color类定义了13种颜色常量值Color.black,Color.blue,Color.gray,Color.red…...对GUI的组件有四种与颜色相关的方法来设置和获取其背景色和前景色:setBackground(Colorc);getBackground();setForeground();getForeground();27例:DrawMyImage.java
publicclassDrawMyImageextendsFrame{
//获得Toolkit实例的方法getDefaultToolkit()Toolkittoolkit=Toolkit.getDefaultToolkit();ImagemyImage;
publicDrawMyImage(){
//获得Image对象,图象文件在当前目录下时
myImage=toolkit.getImage("Invntory.gif");}
//在paint方法中绘制图象
publicvoidpaint(Graphicsg){ g.drawImage(myImage,0,40,Color.orange,this);}……………..}28GUI标准组件概述构建程序的图形用户界面的主要任务有两个创立各界面组件并排列成图形用户界面的外观定义这些组件对不同事件的影响从而完成图形用户界面功能组成图形用户界面的成分有三类用户自定义类容器:是能够容纳并排列其他组件的对象组件:放置在容器中的对象在Java中,容器和组件是由AWT包中的对象来代表,这些对象间的层次关系如以下图:29AWT类层次关系图MenuComponentMenuMenuItemMenuBarComponent
Container
Panel
Applet
Window
Frame
DialogButtonTextFieldTextAreaTextComponentCheckbox其他组件30GUI标准组件概述根本组件被安放在容器中的某位置,用来完成一种具体的与用户交互的功能,使用根本组件一般包括如下的步骤创立某种根本组件类的新对象,指定该对象的属性比方:外观、大小等将该组件对象参加到某个容器的适宜位置创立该组件对象的监听者,即实现以该组件为事件源的事件对应的监听者接口,也可以使现有的类实现该接口成为监听者。将该组件对象注册给此监听者,并在监听者内部实现监听者接口中定义的方法,对该组件可能引发的事件加以处理,定义新参加组件对象的交互性界面功能。比方:接收用户输入的文本、在屏幕显示输出等31GUI标准组件Component:所有组件和容器的抽象父类显示功能:paint(),update(),repaint()显示效果控制:字体、颜色、位置、尺寸图象处理:一般利用Canvas和Container来显示图像事件处理机制〔java1.1〕:addXXXListener()removeXXXListener()32Component类可显示在屏幕上的图形对象,可与用户交互。是所有组件和容器的抽象父类,其中定义了一些每个容器和组件都可能用到的方法。add(PopupMenu
popup)在组件上参加一弹出菜单addFocusListener(FocusListener
l)将发生在本组件上的事件注册给监听者,以进行事件处理。setSize(int
width,int
height)设置组件尺寸repaint(intx,inty,int
width,int
height)重画组件setFont(Font
f)设置组件字体setBackground(Color
c)设置组件背景色setVisible(booleanb)设置组件是否可见33GUI标准组件简单构件:人机交互的根本工具(控制)Button,Checkbox,Label等TextComponent(TextArea,TextField)Canvas复杂构件:Container(安放排列其他构件的容器)PanelWindow34Container〔容器〕排列其中包容的构件定位布局策略set/getLayout()包容其他根本构件增加构件:add()删除构件:remove()控制是否显示容器及其中组件setVisible(true/false)35Container容器组件Window—无边框、菜单的空白窗口。不需要其他组件支撑,独立显示。Frame:用于Application,含边框、标题和菜单的独立窗口Dialog:依赖于Frame的非独立窗口。没有菜单条,不能改变大小。Panel(面板)—属于无边框容器。必须放在Window组件中(或Web浏览器窗口)才能显示。它为一矩形区域,在其中可摆放其他组件,可以有自己的布局管理器。无边框容器包括Panel和Applet。其中Applet为Panel的子类根本方法add(Componentcomp)将指定组件放到容器中getComponent(intindex)获取指定序号的组件remove(Component
comp)删除指定组件setLayout(LayoutManager
mgr)设置容器布局36容器的组件布局布局管理器〔layoutmanager)用于控制组件在容器中的布局负责确定组件在容器中的位置和大小。调用容器的setLayout(布局管理器对象)方法,为容器指定某种布局。当容器需要定位组件和确定组件大小时,就会给布局管理器对象发消息,让它完成该项工作。直接管理组件调用容器的setLayout(null)方法,关闭布局管理器。调用每一个组件的setLocation()方法决定组件位置。调用每一个组件的setSize()方法决定其大小。37布局管理器种类在Java的GUI界面设计中,布局控制是通过为容器设置布局编辑器来实现的。Java.awt包中共定义了五种布局编辑类,每一个布局编辑类对应一种布局策略:FlowLayout:组件在一行中按参加的先后顺序从左至右水平排列,排满后折行,每行中的组件都居中排列。BorderLayout:把容器空间划分为北、南、西、东、中五个区,每参加一个组件都应说明把这个组件加在那个区域中。CardLayout:每一个组件作为一个卡片,容器仅显示多个卡片中的某一个GridLayout:以行和列的网格形式安排组件GridBagLayout:更复杂、功能更强的网格布局38确定容器布局缺省的布局管理器Window、Frame、Dialog—BorderLayout:缺省的窗口容器的管理器Panel、Applet—FlowLayout:缺省的Panel布局管理器选择布局管理器的方法建立布局管理器类的对象利用容器的setLayout为容器指定布局(即指定一个布局管理器的对象)39确定容器布局改变缺省布局管理器的方法;例:BorderLayoutB=newBorderLayout(); C1.setLayout(B);or C1.setLayout(newBorderLayout());
例:将myFrame布局设定为FlowLayout类型
myFrame.setLayout(newFlowLayout());40FrameFrame(Stringtitle)构造一个新的不可见的frame隐含的布局管理器是:BorderLayoutsetLayout(…)设置新的布局管理器。add(Component
comp)在容器上增加一个组件〔在容器为不可见的状态时加〕。voidsetSize(int
width,int
height)设置组件大小setVisible(true)设置组件可见41Frame—Panel
Framefm1=newFrame("Hello");fm1.setSize(400,350);fm1.setBackground(Color.gray);fm1.setLayout(null);Panelpn1=newPanel();pn1.setSize(100,100);pn1.setBackground(Color.red);pn1.setLocation(0,50);fm1.add(pn1);…fm1.setVisible(true);
42FlowLayout布局管理器构造方法:FlowLayout();FlowLayout(intalign,inthgap,intvgap);align:对齐方式:LEFTCENTERRIGHThgap:组件水平间距〔象素〕vgap:组件垂直间距无参数的构造方法创立的FlowLayout对象,其对齐方式为CENTER居中方式,组件间的横纵间距都为5个像素。43FlowLayout布局管理器
Framef=newFrame("FlowLayout");f.setSize(400,300);//不起作用
f.setBackground(Color.gray);f.setLayout(newFlowLayout(FlowLayout.LEFT,10,20));b1=newButton("button1");b2=newButton("button2");b3=newButton("button3");f.add(b1);f.add(b2);f.add(b3);f.setVisible(true);f.pack();//询问布局管理器窗体大小44BorderLayout布局管理器setLayout(newBorderLayout())add(b1,BorderLayout.NORTH);
当容器大小改变,组件相对位置不会改变。CenterNorthSouthWestEast45BorderLayout布局管理器
f=newFrame("BorderLayout");f.setSize(200,200);b1=newButton("button1");…b5=newButton("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.CENTER);f.setVisible(true);46Border-PanelclassMyFrameextendsFrame{MyFrame(){Buttonb1=newButton("1");Buttonb2=newButton("2");Buttonb3=newButton("3");Buttonb4=newButton("4");Panelp=newPanel();p.add(b1);p.add(b2);add(p,BorderLayout.NORTH);add(b3,BorderLayout.WEST);add(b4,BorderLayout.CENTER);pack();setVisible(true);}}47GridLayout布局管理器创立GridLayout对象作为布局编辑器,指定划分网格的行数和列数(网格大小一样〕。setLayout(newGridLayout(行数,列数));setLayout(newGridLayout(行数,列数,行间隔,列间隔));调用容器的方法add()将组件参加容器,组件填入容器的顺序将按照第一行第一个、第一行第二个、……每个网格中都必须填入组件,如果希望某个网格为空白,可以为它参加一个空的标签:add(newLabel());48GridLayout布局管理器
f=newFrame("GridLayout");f.setLayout(newGridLayout(2,3));f.setSize(200,100);f.setBackground(Color.gray);b1=newButton("1");…b6=newButton("6");f.add(b1);…f.setVisible(true);49布局例
Framefm=newFrame()fm.setLayout(newFlowLayout());tf=newTextField(22);fm.add(tf);Panelp1=newPanel();p1.setLayout(newGridLayout(4,3));p1.add(…);Panelp2=newPanel();p2.setLayout(newGridLayout(4,3));p2.add(…);fm.add(p1);fm.add(p2);50GridBagLayout布局管理器每个GridBagLayout对象维护一个动态矩形网格,每个组件可占据一个或多个单元作为它的显示区域。每一个组件都与一个GridBagConstraints类的实例相连,以指定在显示区域中如何摆放,并可确定大小。步骤:setLayout(newGridBagLayout());GridBagConstraintsgbc=newGridBagConstraints();gbc.gridx=0;…(属性赋值)add(button1,gbc)51GridBagLayout布局管理器设置GridBagConstraints类实例属性值:gridxgridy组件显示区域的左上角单元格坐标gridwidthgridheight指定显示区域行、列单元数RELATIVE紧挨着前一个组件摆放fill当显示区域大于组件时如何扩充组件:HORIZONTAL水平充满VERTICAL垂直充满BOTH全部填充NONE不调整〔隐含〕ipadxipady指定组件间最小间隔anchor当显示区域大于组件时如何摆放组件(对齐方式)CENTER〔隐含〕,NORTH,EAST,SOUTH,WEST,SOUTHEAST,NORTHEAST,SOUTHWEST,NORTHWEST.52CardLayout布局管理器使用CardLayout的容器外表可以容纳多个组件,将每一个组件视为一张卡片,同一时刻只能显示一个组件。setLayout(newCardLayout())CardLayout方法〔按序指定组件〕first(Container
parent)显示第一个版面的内容last(Container
parent)显示最后一个版面的内容previous(Container
parent)显示前一个版面的内容next(Container
parent)显示下一个版面的内容CardLayout方法(按名显示组件〕addLayoutComponent(String
name,Component
c)show(Container
parent,String
name)53利用AWT创立自己的GUIGUI外观设计设计标准构件层次关系:构件层次结构关系树设置容器布局策略:setLayout()生成标准构件向容器中添加组成构件:add()方法构件事件处理例:AWTComponent.java54publicclassAWTComponentextendsFrame{.........publicAWTComponent(){ setSize(450,300);//设置Frame大小 setLayout(newFlowLayout());//设置布局 ......... //创立组件 Group1=newCheckboxGroup();//创立单项选择按钮组 radioButton1=newCheckbox("male", Group1,false); add(radioButton1);//把组件参加容器 radioButton2=newCheckbox("female", Group1,false); add(radioButton2); ......... setVisible(true);//显示容器及组件 }.........}还缺什么吗?55的事件处理使用单一的类来接受所有类型的事件;使用action(),handleEvent()以及其他的一些事件处理方法〔如鼠标事件、键盘事件、焦点事件〕来进行相应事件的事件处理。缺点:造成长if分支语句组,不利于面向对象的编程56Java1.1对事件处理的改进引入包更加面向对象,易于理解定义了事件的“发生者〞和“监听者〞对象按钮事件、文本领件、选择事件、调整事件、鼠标事件、键盘事件等事件以类层次来表达,取代了1.0.2中的单一的类,并可以自定义事件类型57事件及处理机制用户操作GUI组件时会引发各种事件。事件:描述“发生了什么事情〞的对象。系统根据用户的操作构造出相应事件类的对象。事件源:事件的产生地。事件处理程序:是一个方法,它接收一个事件对象、分析它、并完成对该事件的处理。每个事件有一个相应的监听者接口,它规定了能够接收〔并处理〕该类事件的方法的标准。监听者:实现了监听者接口的类,它包含有事件处理程序。编程人员要为事件源指定监听者对象〔即指定处理某种事件的事件处理程序〕。58事件处理机制组件〔事件发生者〕触发一个相应类型的事件此事件由相应类型的Listener〔事件监听者〕接收并处理Button1事件发生者接收事件e,并做处理ActionListener事件监听者触发ActionEvente点击,59事件及处理机制调用按扭的addActionListener(
)方法,为该按扭指定监听者。鼠标单击按扭ActionEvent事件
触发publicvoidactionPerformed(ActionEvente)ActionListener接口ActionEvent事件监听者类监听者对象实现接口60几个有用的概念事件-在包中定义了假设干类型的事件类监听者接口-特定类型的Listener接口,用于监听特定类型的事件监听者类-是实现了某种监听者接口的类,由编程者定义事件监听者-是某个监听者类的对象,由编程者使用new创立61实现步骤根据需要定义相应类型的监听者类,在类的定义中完成事件的处理〔建议使用innerclass定义〕;创立事件监听者对象;为将会触发事件的组件C注册相应的事件监听者对象〔使用C的addXXXListener()方法〕。例:ButtonAct.java62publicclassButtonActextendsFrame{.........publicButtonAct(){ .........//为b1注册事件监听者B1
b1.addActionListener(newB1()); add(b1); .........}//利用innerclass结构定义监听者类
classB1implementsActionListener{//利用actionPerformed方法进行事件处理
publicvoidactionPerformed(ActionEvente){ who.setText("Button1"); }}.........}///:~63事件与监听者类型XXXListener接口与XXXEventXXX为特定类型常用类型:
Action,Focus,Key,Window,MouseEventvs. Mouse/MouseMotionListener注册与取消:组件包含的新方法
addXXXListener()与removeXXXListener()参考:eventtables.html64监听者接口中有什么?每种Listener接口均定义了一套abstract方法,编程者必须在监听者类中实现这些方法来做事件处理;例:ActionListener:actionPerformed()WindowListener: windowOpened/Closing/Closed/Activated/
Deactivated/Iconified/Deiconified()65使用ListenerAdapter由于接口中的方法为abstract方法,所以在监听者类中要实现所有的方法,较为烦琐。为了简化编程,引入了Adapter。具有两个以上方法的监听者接口均对应一个XXXAdapter类,提供了接口中每个方法的缺省实现。66使用ListenerAdapter〔续〕例:classMyWindowListenerextendsWindowAdapter{publicvoidwindowClosing(WindowEvente){System.exit(0);}}例:DoubleClick.java〔相应鼠标事件〕67publicclassDoubleClickextendsFrame{Vectorm_vLocs;//保存鼠标单击过的各点,用以绘制各点连线
Pointm_CursorLoc;//跟踪当前鼠标位置,用以绘制十字光标
publicDoubleClick(){ m_vLocs=newVector(); m_CursorLoc=newPoint(100,100); setSize(400,400);
//为Frame注册3个事件监听者
addMouseListener(newclick()); addMouseMotionListener(newmove()); addWindowListener(newwd());}publicvoidpaint(Graphicsg){…//绘制十字光标,连接各点}68classclickextendsMouseAdapter{//鼠标事件监听者类 publicvoidmouseClicked(MouseEvente){//响应点击 if(e.getClickCount()>1)//双击时去除向量中各点 m_vLocs.removeAllElements(); else//单击时在向量中增加一点 m_vLocs.addElement(e.getPoint()); repaint();//重新绘制一次 }}classmoveextendsMouseMotionAdapter{//鼠标移动监听者类 publicvoidmouseMoved(MouseEvente){//响应移动 m_CursorLoc=newPoint(e.getX(),e.getY()); repaint();//重新绘制一次 }}…………}69事件类ActionEvent类:属于动作事件,包括:点击按钮;双击一个列表中的选项;选择菜单项;在文本框中按回车。最典型的例子是:鼠标点击按钮所产生的事件,经ActionListener接口触发一连串动作,再由actionPerformed()方法完成这些动作。e.getSource()返回事件发生的对象(名)e.getActionCommand()返回按扭名(动作事件的命令字符串)。ActionListener接口publicvoidactionPerformed(ActionEvente)70图形用户界面例importjava.awt.*;import.*;publicclassa{publicstaticvoidmain(Stringargs[]){MyFrameform1=newMyFrame();}}classMyFrameextendsFrame{MyFrame(){super("窗口标题");
setSize(200,100);setFont(newFont("TimesRoman",Font.BOLD,20));71图形用户界面例
setLayout(newFlowLayout());Buttonb=newButton("close");add(b);b.addActionListener(newBprocess());setVisible(true);}}classBprocessimplementsActionListener{publicvoidactionPerformed(ActionEvente){System.exit(0);}}72监听者类某个类可以兼职也可以专职做这件事〔实现监听者接口〕。一个类假设实现一个接口,必须实现接口的全部方法。例如:ActionListener接口只有一个方法:voidactionPerformed(ActionEvente)实现接口的类可以是:一般类内部类匿名类73事件处理有关问题有哪些事件类()?每个事件类的监听者接口?每个监听者接口规定的方法?多方法的监听者接口的适配器〔实现接口的抽象类〕是什么?组件的事件委托〔注册〕方法?74窗口事件关闭窗口框时引发WindowEvent事件委托addWindowListener(newWclose());定义监听者类
classWcloseimplementsWindowListener{ publicvoidwindowClosing(WindowEvente){ System.exit(0);}WindowListener类有7个方法,必须都实现WindowAdapter
接收窗口事件的抽象适配器类,用空内容实现了WindowListener接口的所有方法classWcloseextendsWindowAdapter{…}75ActionEvent动作事件引发原因:单击按扭,双击列表框中选项,选择菜单项,文本框中的回车事件监听接口:ActionListener接口方法:actionPerformed(ActionEvente)组件注册该事件方法:addActionListener(监听者〕76TextEvent文本领件引发原因:文本框或文本区域内容改变事件监听接口:TextListener接口方法:textValueChanged(TextEvent
e)组件注册该事件方法:addTextListener(监听者〕77ItemEvent选择事件引发原因:改变列表框中的选中项改变复选框选中状态改变下拉选单的选中项事件监听接口:ItemListener接口方法:itemStateChanged(ItemEvent
e)组件注册该事件方法:addItemListener(监听者〕78AdjustmentEvent调整事件引发原因:操作滚动条改变滑块位置事件监听接口:AdjustmentListener接口方法:adjustmentValueChanged(AdjustmentEvent
e)组件注册该事件方法:addAdjustmentListener(监听者〕79KeyEvent事件引发原因:敲完键〔KEY-TYPED)按下键(KEY-PRESSED)释放键(KEY-RELEASE)事件监听接口:KeyListener接口方法:keyPressed(KeyEvent
e)键已被按下时调用keyReleased(KeyEvent
e)键已被释放时调用keyTyped(KeyEvent
e)键已被敲完时调用KeyEvent方法:charch=e.getKeyChar();事件监听适配器〔抽象类〕KeyAdapter组件注册该事件方法:addKeyListener(监听者〕80MouseEvent事件引发原因:(鼠标作用在一个组件上)鼠标事件:鼠标键按下,鼠标键抬起,单击鼠标,鼠标光标进入一个组件,鼠标光标离开一个组件。鼠标移动事件:鼠标移动,鼠标拖动鼠标事件监听接口1:MouseListener接受鼠标事件该接口方法:mouseClicked(MouseEvent
e)mouseEntered(MouseEvent
e)鼠标光标进入一个组件mouseExited(MouseEvent
e)鼠标光标离开一个组件81MouseEvent事件〔续〕鼠标事件监听适配器〔抽象类〕MouseAdapter鼠标事件监听接口2:MouseMotionListener接受鼠标移动事件该接口方法:mouseMoved(MouseEvent
e)鼠标光标在组件上移动mouseDragged(MouseEvent
e)用鼠标拖动一个组件鼠标移动事件监听适配器MouseMotionAdapter组件注册鼠标事件方法:addMouseListener(监听者〕组件注册鼠标移动事件方法:addMouseMotionListener(监听者〕82MouseEvent事件〔续〕MouseEvent方法e.getClickCount()=1单击=2双击Pointe.getPoint()取鼠标光标位置inte.getX()inte.getY()取鼠标光标位置e.getModifiers()=e.BUTTON1_MASK鼠标左键=e.BUTTON3_MASK鼠标右键83WindowEvent事件引发原因:有关窗口操作引发的事件事件监听接口WindowListener接口方法windowActivated(WindowEvent
e)
激活窗口windowClosed(WindowEvent
e)
调用dispose方法关闭窗口后windowClosing(WindowEvent
e)
窗口正在被关闭(试图利用窗口关闭按钮关闭窗口)windowDeactivated(WindowEvent
e)
本窗口成为非活动窗口84WindowEvent事件(续〕windowDeiconified(WindowEvent
e)窗口从最小化恢复为普通窗口windowIconified(WindowEvent
e)窗口变为最小化图标windowOpened(WindowEvent
e)窗口被翻开成为可见时接口适配器WindowAdapter注册事件方法addWindowListener85FocusEvent事件引发原因:组件获得焦点组件失去焦点事件监听接口FocusListener接口方法:focusGained(FocusEvente)组件获得焦点时调用focusLost(FocusEvent
e)组件失去焦点时调用接口适配器:FocusAdapter组件注册该事件方法:addFocusListener86TextEvent事件引发原因:当组件〔如文本框〕文本改变时引发事件监听接口:TextListener接口方法:textValueChanged(TextEvent
e)组件注册该事件方法:addTextListener87ComponentEvent事件引发原因:当组件移动、改变大小、改变可见性时引发事件监听接口:ComponentListener接口方法:componentHidden(ComponentEvente)组件隐藏componentMoved(ComponentEvent
e)组件移动componentResized(ComponentEvent
e)组件改变大小componentShown(ComponentEvent
e)组件变为可见接口适配器ComponentAdapter组件注册该事件方法:addComponentListener88ContainerEvent事件引发原因:当容器内增加或移走组件时引发事件监听接口:ContainerListener接口方法componentAdded(ContainerEvent
e)容器内参加组件componentRemoved(ContainerEvent
e)沉着器中移走组件接口适配器ContainerAdapter容器注册该事件方法:addContainerListener89GUI标准组件Label(标签)构造方法Labelmyl=newLabel(“标签内容〞);Labela=newLabel(“information〞);Labela=newLabel(“information〞,Label.CENTER);方法a.setText(“新内容〞);设置标签内容Stringa.getText()读取标签内容Button(按钮)ButtonmyB1=newButton();ButtonmyB2=newButton(“Cancel〞);90GUI标准组件Checkbox(检测盒)创立时指定检测盒的标签Checkboxcb1=newCheckbox();Checkboxcb2=newCheckbox(“registered〞);Checkboxcb3=newCheckbox(“registered〞,true);Checkboxcb4=newCheckbox(“registered〞,true,group);获取和设置检测盒的状态cb.setState(true);booleanb=cb.getState();91Checkbox组件构造方法Checkbox(String
label)Checkbox(String
label,boolean
state)Checkbox(String
label,boolean
state,
CheckboxGroup
group)
方法:booleangetState()setState(boolean
state)92GUI标准组件CheckboxGroup(单项选择按钮组)单项选择按钮组是一组Checkbox的集合,是将一组Checkbox按扭组成单项选择按扭组件首先创立CheckboxGroup,再参加单个按钮方法:CheckboxgetSelectedCheckbox()取得目前选取的复选框对象setSelectedCheckbox(Checkbox
box)设定目前选取的复选框对象93CheckboxGroup组件例:setLayout(newGridLayout(3,1));CheckboxGroupcbg=newCheckboxGroup();Checkboxck1=newCheckbox(“one〞,true,cbg);Checkboxck2=newCheckbox(“two〞,false,cbg);Checkboxck3=newCheckbox(“three〞,false,cbg);add(ck1);add(ck2);add(ck3);把CheckboxGroup参加容器时需要把其中的每个复选按钮逐个参加到容器中,而不能使用CheckboxGroup对象一次性地参加。94TextField行编辑框组件构造方法(String,int)TextFieldf1=newTextField(30);TextFieldf1=newTextField(“abc〞,30);建30个字符宽的行编辑框方法:StringgetText()读文本框内容setText(“abc〞)设置编辑框内容setEchoChar(char
c)设置回显字符TextComponent方法:setEditable(false);selectAll()95TextArea组件构造方法(String,int,int)TextAreat1=newTestArea(10,45);建10行、45列的文本区域TextAreat1=newTestArea(“abc〞,10,45);TextAreat1=newTestArea(“abc〞,10,45,滚动条);滚动条指定SCROLLBARS_BOTHSCROLLBARS_HORIZONTAL_ONLYSCROLLBARS_VERTICAL_ONLYSCROLLBARS_NONE方法append(String
str)追加文本96List列表框首先创立List对象,再调用add()方法参加List列表的各选项。列表可以实现多项选择多构造方法List(int
rows,boolean
multipleMode)rows显示行数;multipleMode是否允许多项选择方法:list1.add(“classA〞);list1.add(“classB〞);list1.add(“classC〞,0);指定参加选项位置97List列表框方法intgetSelectedIndex()取被选项索引int[]getSelectedIndexes()取被选项索引〔多项选择〕StringgetSelectedItem()取被选项String[]getSelectedItems()取被选项〔多项选择〕voidselect(int
index)选中指定的项StringgetItem(int
i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社工站项目书撰写培训
- 沙龙活动主持人培训
- 幼儿园急救安全教育培训
- 二零二四年品牌授权经营合同4篇
- 2024版工程代理与居间合同2篇
- 2024年度特许经营合同:某连锁品牌的特许经营协议2篇
- 《爱心主题班会》课件
- 庆六一亲子活动方案
- 2024版甲方乙方合作开展教育培训项目合同3篇
- 房装修合同范本
- 肠内营养常见并发症其处理
- 谈基坑施工对邻近地铁的影响及保护措施
- 渔光互补光伏项目施工方案设计
- 多功能视讯会议系统项目售后服务方案
- 甲状腺切除术护理查房精编ppt
- DB63∕T 1906-2021 青海省环境卫生精细化管理质量标准
- 新冀美版八年级上册初中美术全册教案(教学设计)
- 部编版四年级语文上册 18 牛和鹅 生字笔顺 课件(PPT16页)
- 特效无痛腹针疗法讲义
- 公司 光伏电站项目投资与工程服务激励方案
- 外研版九年级上册英语课文原文与翻译
评论
0/150
提交评论