《第7章 图形用户界面的设计与实现.ppt》由会员分享,可在线阅读,更多相关《第7章 图形用户界面的设计与实现.ppt(258页珍藏版)》请在三一办公上搜索。
1、第7章 图形用户界面的设计与实现,7.1 图形用户界面概述7.2 用户自定义成分7.3 Java的事件处理7.4 GUI标准组件概述7.5 标签、按钮与动作事件7.6 文本框、文本区域与文本事件,7.7 单、复选按钮,列表与选择事件7.8 滚动条与调整事件7.9 画布与鼠标、键盘事件7.10 布局设计7.11 Panel与容器事件7.12 Frame与窗口事件7.13 菜单的定义与使用7.14 对话框、组件事件与焦点事件,在Java语言中,为了支持图形用户界面的开发,设计了类库java.awt包来生成各种标准图形界面元素和处理图形界面的各种事件。AWT是abstract window tool
2、kit(抽象窗口工具集)的缩写。,7.1 图形用户界面概述,图形用户界面的构成:图形用户界面是一组图形界面成分和界面元素的有机组合,这些成分和元素之间不但外观上有着包含、相邻、相交等物理关系,内在的也有包含、调用等逻辑关系,它们互相作用、传递消息,共同组成一个能响应特定事件、具有一定功能的图形界面系统。,设计和实现图形用户界面的工作主要两个:创建组成界面的各元素,指定它们的属性和位置关系,构成完整的图形用户界面的外观。定义图形用户界面的事件和各界面元素对不同事件的响应,实现与用户的交互。Java中构成图形用户界面的各种元素和成分有三类:容器、控制组件和用户自定义成分。,1.容器容器是用来组织其
3、他界面成分和元素的单元。一个应用程序的图形用户界面首先对应于一个复杂的容器,如一个窗口。利用容器有利于分解图形用户界面的复杂性,当界面的功能较多时,可以使用嵌套的容器。,2.控制组件控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控制组件的作用是完成与用户的一次交互,包括接收用户的一个命令(如菜单命令),接收用户的一个文本或选择输入,向用户显示一段文本或一个图形,等等。,使用控制组件的步骤:(1)创建某控件类对象,指定属性。(2)使用某种布局,将该控件对象加入到某容器中的指定位置。(3)将该组件对象注册给它所能产生的事件对应的事件监听者,重载事件处理方法,实现利用该组件对象与用
4、户交互的功能。实际上,容器也是一种控件,因为一个容器也可以被视为组件而包含在其他容器的内部。,3.用户自定义成分绘制几何图形、使用标志图案等。用户自定义成分不能被系统识别和承认,通常只能起到装饰、美化的作用,而不能响应用户的动作,也不具有交互功能。,Graphics是java.awt包中一个类,包含绘制图形和文字的方法。当一个Applet运行时,执行它的浏览器自动为它创建一个Graphics实例,利用这个实例,可在Applet中随意绘制图形和文字。若需在图形界面的Java Application程序中绘制图形,则需创建一个Canvas类的对象加入到该Application程序的图形界面容器中,
5、Canvas对象也有一个与Applet类的paint()方法相同的paint()方法,利用系统传递给这个paint()方法的Graphics类参数对象就可以在Application程序的图形用户界面中绘制各种图形和文字。,7.2 用户自定义成分,7.2.1 绘制图形利用Graphics类可绘制的图形有直线、各种矩形、多边形、圆和椭圆等。例 7-1 UsedDrawFigures.java,import java.awt.*;import java.applet.Applet;public class UsedDrawFigures extends Applet public void pain
6、t(Graphics g)g.drawLine(30,5,40,5);/画直线 g.drawRect(40,10,50,20);/画矩形框(左上角x坐标,左上角y坐标,x轴尺寸,y轴尺寸)g.fillRect(60,30,70,40);/画实心矩形 g.drawRoundRect(110,10,130,50,30,30);/画圆角矩形框 g.drawOval(150,120,70,40);/画椭圆形框(左上角x坐标,左上角y坐标,x轴尺寸,y轴尺寸),/若x轴尺寸与y轴尺寸相等,则画出圆形,g.fillOval(190,160,70,40);/画实心椭圆 g.drawOval(90,100,5
7、0,40);/画椭圆框 g.fillOval(130,100,50,40);/画实心椭圆 drawMyPolygon(g);/自定义的画多边形的方法 g.drawString(They are figures!,100,220);public void drawMyPolygon(Graphics g)int xCoords=30,50,65,119,127;/保存多边形各点x坐标的数组 int yCoords=100,140,127,169,201;/保存多边形各点y坐标的数组 g.drawPolygon(xCoords,yCoords,5);/画自由多边形框,7.2.2 显示文字Graph
8、ics类的方法drawString()可在屏幕的指定位置显示一个字符串。Font类,可获得更丰富多彩和逼真精确的字体显示效果。一个Font类的对象表示了一种字体显示效果,包括字体、字型和字号。例如:Font MyFont=new Font(“TimesRoman”,Font.BOLD,12);MyFont对应的是12磅TimesRoman类型的黑体字,其中指定字型时需要用到Font类的三个常量:Font.PLAIN,Font.BOLD,Font.ITALIC。,若需使用该Font对象,可利用Graphics类的setFont()方法:g.setFont(MyFont);若指定控件的字体效果,如
9、按钮或文本框等,可使用控件的方法setFont()。设btn是按钮对象,则语句:btn.setFont(MyFont);把该按钮上显示的字体改为12磅的TimesRoman黑体字。getFont()方法将返回当前Graphics或组件对象使用的字体。,例 7-2 AvailableFonts.java,import java.applet.*;import java.awt.*;public class AvailableFont extends Applet GraphicsEnvironment gl=GraphicsEnvironment.getLocalGraphicsEnvironm
10、ent();String FontNames=gl.getAvailableFontFamilyNames();public void paint(Graphics g)Font current,oldFont;oldFont=g.getFont();for(int i=0;iFontNames.length;i+)current=new Font(FontNames i,Font.PLAIN,10);g.setFont(current);g.drawString(current.getName(),10+i%4*120,20+i/4*15);g.setFont(oldFont);,7.2.3
11、 控制颜色Applet中显示的字符串或图形的颜色可以用Color类的对象来控制,每个Color对象代表一种颜色,用户可以直接使用Color类中定义好的颜色常量,也可通过调配红、绿、蓝三色的比例创建自己的Color对象。,Color类定义了三种构造函数:public Color(int Red,int Green,int Blue);/整型参数指定R,G,B的取值范围在0255之间public Color(float Red,float Green,float Blue);/浮点参数R,G,B的取值范围在0.01.0之间public Color(int RGB);/整型参数指明RGB三色比例,这
12、个参数的07比特(取值范围为0255)代表红色的比例,815比特代表绿色的比例,1623比特代表蓝色的比例例:创建蓝色:Color blueColor=new Color(0,0,255);,Graphics对象的setColor():把当前的缺省颜色修改成新建的颜色,此后调用该Graphics对象完成的绘制工作,如绘制图形、字符串等,都使用这个新建颜色:g.setColor(blueColor);除了创建自己的颜色,也可以直接使用Color类中定义好的颜色常量,如:g.setColor(Color.cyan);Color类中共定义了13种静态颜色常量,包括black,orange,pink,
13、grey等,使用时只需以Color为前缀。,对于GUI的控制组件,它们有四个与颜色有关的方法分别用来设置和获取组件的背景色和前景色:public void setBackground(Color c)public Color getBackground()public void setForeground()public Color getForeground(),import java.applet.*;import java.awt.*;public class MyUseColor extends Applet Color oldColor;String ParamName=red,gr
14、een,blue;/三个HTML参数的名称 int RGBarray=new int3;/保存三色比例的数组 public void init()for(int i=0;iParamName.length;i+)/取得HTML文件指定的三色 RGBarrayi=Integer.parseInt(getParameter(ParamNamei);public void paint(Graphics g)oldColor=g.getColor();/保存原有的缺省颜色 g.setColor(new Color(RGBarray0,RGBarray1,RGBarray2);/置新颜色 g.drawS
15、tring(How do you think about Current color:+g.getColor().toString(),10,20);/用新建颜色显示该颜色的三色分量 g.setColor(oldColor);/恢复原有颜色 g.drawString(Back to old default color:+g.getColor().toString(),10,40);,例 7-3 UseColor.java,HTML文件如下:UseColor 通过改变三个参数的数值(应在0255之间),就可以指定不同的颜色而不需要重新编译Java Applet程序。,7.2.4 显示图像图像文件
16、有多种格式,如bmp文件、gif文件、tiff文件等等,其中gif是Internet上常用的图像文件格式。Java中可以利用Graphics类的drawImage()方法来显示图像。,import java.awt.*;import java.applet.Applet;public class UsedDrawMyImage extends Applet Image myImage;public void init()myImage=getImage(getDocumentBase(),Winter.gif);public void paint(Graphics g)g.drawImage(
17、myImage,0,0,this);/显示图像,例 7-4 UsedDrawMyImage.java,drawImage()是Graphics类中用来显示图像的方法。第一个参数保存有图像数据的Image对象。第二、第三个参数是图像的左上角点坐标,它们决定了图像在容器中的显示位置。最后一个参数是显示图像的容器对象。this代表当前的Applet对象。,获取、显示本机其它位置处的图像:Image myImage=getToolkit().getImage(“E:新建相册IMG_0207.jpg”);或:Image myImage=Toolkit.getDefaultToolkit().getIma
18、ge(E:新建相册IMG_0207.jpg);显示来自网上的某张图片:myImage=this.getToolkit().getImage(new URL(http:/myImage=this.getImage(new URL(http:/http:/,7.2.5 实现动画效果动画是Java Applet最吸引人的特性之一。用Java实现动画的原理与放映动画片类似,取若干相关的图像或图片,顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。,例 7-5 MyShowAnimator.java,import java.applet.Applet;import java.awt.*;
19、public class MyShowAnimator extends Applet int x=10;Image m_Images;/保存图片序列的Image数组 int totalImages=5;/图片序列中的图片总数 int currentImage=0;/当前时刻应显示的图片序号 public void init()m_Images=new ImagetotalImages;/从当前目录下的images子目录中将Img001.gif到Img0010.gif的文件加载 for(int i=0;itotalImages;i+)m_Imagesi=getImage(getDocumentB
20、ase(),imageswinter00+(i+1)+.gif);public void start()currentImage=0;/从第一幅开始显示,public void paint(Graphics g)g.drawImage(m_ImagescurrentImage,x,50,this);/显示当前序号的图片 x+=20;currentImage=+currentImage%totalImages;/计算下一个应显示图片的序号 try Thread.sleep(200);/程序休眠50毫秒 catch(InterruptedException e)/处理执行休眠方法可能引发的异常 s
21、howStatus(e.toString();repaint();/图片停留50毫秒后被擦除,重新调用paint()显示下一张图片,Thread.sleep():使当前的程序线程休眠一段时间,以便每幅图片在下一幅图片显示之前在屏幕上逗留一时间,线程的具体编程将在以后章节介绍。getImage()方法获取所有的.gif图像文件(注意目录)。paint()方法一次显示一幅图像,稍后再显示Image对象数组中的下一幅图像。,图形用户界面事件响应的基本原理:键盘或鼠标操作能引发系统预先定义好的事件,用户程序只需要编制代码定义每个特定事件发生时程序应做出何种响应即可。这些代码会在它们对应的事件发生时由系
22、统自动调用。Java中,除了键盘和鼠标操作,系统的状态改变、标准图形界面元素等都可以引发事件,对这些事件分别定义处理代码,就可保证应用程序在不同状况下都合理有效、有条不紊地正常工作。Java的事件处理机制中引入了委托事件模型(如下图),不同的事件由不同的监听者处理。,7.3 Java的事件处理,委托事件模型,图形用户界面的每个可能产生事件的组件叫事件源,不同事件源上发生的事件的种类不同。如,Button对象或MenuItem对象等作为事件源可能引发ActionEvent类代表的事件ACTION-PERFORMED;Checkbox对象等作为事件源可能引发ItemEvent类代表的事件ITEM-
23、STATE-CHANGES。,希望事件源上发生的事件被程序处理,应把事件源注册给能够处理该事件源上那种类型事件的监听者。例如Button对象把自己注册给实现了ActionListener接口的对象,因为只有这种对象能够处理Button对象上发生的ActionEvent类的事件,监听者可以是包容事件源的容器,也可为另外的对象。注册方法是通过调用事件源本身的相关方法,例如调用Button类自身的addActionListener()方法,并以监听者对象作为实际参数来实现的。,监听者具有监听和处理某类事件的功能,因为它实现了有关的接口,所以监听者需要对它所实现接口的所有抽象方法写出具体的方法体,对应
24、事件源上发生的事件的处理代码就写在这些方法体中。例如对Button上发生的事件的处理代码就是写在Button对象所注册的监听者的actionPerformed()方法中,这个方法是对ActionListener接口中同名抽象方法的具体实现。,当事件源上发生监听者可以处理的事件时,事件源把这个事件作为实际参数传递给监听者中负责处理这类事件的方法(委托),该方法被系统自动执行后,事件就得到了处理。监听者不一定是包容事件源的容器对象,这使程序中的事件处理代码与GUI界面构成代码可以分离,利于优化程序结构;另外,由于Java对事件作了详细的分类并委托不同的接口方法来处理,这也提高了的代码性能。,AWT
25、Event类体系结构图,Java的所有事件类和处理事件的监听者接口都定义在java.awt.event包中,事件类的层次结构如右图。,上图中包括的事件类基本都是java.awt.AWTEvent类的子类,而java.awt.AWTEvent类则是java.util.EventObject类的子类。EventObject的一个重要方法是getSource(),该方法返回产生事件的事件源,几乎所有的事件类都要用到该方法。注意:并非每个事件类都只对应一个事件,例如KeyEvent类可能对应KEY-PRESSED(键按下)、KEY-RELEASED(键松开)、KEY-TYPED(击键)三个具体的事件。
26、,判断一个KeyEvent类的对象到底代表哪种事件,可以调用它的getID()方法并把方法的返回值与KEY-PRESSED等几个常量相比较。每个事件类的对象都拥有getID()方法,是它们从共同的父类AWTEvent那里继承来的。,7.4 GUI标准组件概述构建程序的图形用户界面的主要任务有两个:一、创建各界面组件并排列成图形用户界面的物理外观;二、定义组件对不同事件的响应、完成图形用户界面功能。,AWT组件层次关系图,基本控件被安放在容器中的某个位置,用来完成用户交互的功能。使用基本控件的步骤如下:(1)创建某基本控件类的对象,指定其属性,如外观、大小等。(2)将该对象加入到某个容器的合适位
27、置。(3)创建该组件对象的监听者,即实现以该组件为事件源的事件对应的监听者接口,也可以使现有的类实现该接口成为监听者。将该组件对象注册给此监听者,并在监听者内部实现监听者接口中定义的方法,对该组件可能引发的事件加以处理,定义新加入的组件对象的交互性界面功能,如接收用户输入的文本或选择、做屏幕显示输出等。,Component类是所有组件和容器的抽象父类,它定义了每个容器和组件都可能用到的方法,常用的有:(1)public void add(PopupMenu popup):在组件上加入一个弹出菜单,当用户用鼠标右键单击组件时将弹出该菜单。(2)public Color getBackground
28、():获得组件的背景色。(3)public Font getFont():获得组件使用的字体。(4)public Color getForeground():获得组件的前景色。,(5)public Graphics getGraphics():获得在组件上绘图时需要使用的Graphics对象。(6)public void repaint(int x,int y,int width,int height):以指定的坐标点(x,y)为左上角,重画组件中指定宽度(width)、指定高度(height)的区域。(7)public void setBackground(Color c):设置组件的背景色
29、。(8)public void setEnabled(boolean b):设置组件的使能状态。参数b为真则组件使能,否则组件不使能。只有使能状态的组件才能接受用户输入并引发事件。,(9)public void setFont(Font f):设置组件使用的字体。(10)public void setSize(int width,int height):设置组件的大小。(11)public void setVisible(boolean b):设置组件是否可见的属性。参数b为真时,组件在包括它的容器可见时也可见;否则组件不可见。(12)public void setForeground(Col
30、or c):设置组件的前景色。(13)public void requestFocus():使组件获得注意的焦点。下面从创建、常用方法和事件响应几个方面来讨论常用的GUI组件和容器。,7.5 标签、按钮与动作事件1.标签(Label)标签是用户只能查看其内容的文本显示区域,每个标签用一个Label类的对象表示。(1)创建标签创建标签对象时应同时说明这个标签中的字符串:Label prompt=new Label(请输入一个整数:);(2)常用方法,若需修改标签的文本,可以使用Label对象的方法setText(新字符串);对于一个未知标签,可通过调用Label对象的getText()方法来获得
31、它的文本内容。如下所示:if(prompt.getText()=你好)prompt.setText(再见);else if(prompt.getText()=再见)prompt.setText(你好);(3)产生事件标签不能接受用户的输入,所以不能引发事件。它不是事件源。,2.按钮(Button)按钮一般对应一个事先定义好的功能操作,并对应一段程序。当用户点击按钮时,系统自动执行与该按钮相联系的程序,从而完成预先指定的功能。(1)创建创建一个按钮,传递给构造函数的字符串参数指明按钮上的标签:Button enter=new Button(操作);(2)常用方法,getLabel():返回按钮标
32、签字符串;setLabel(String s):把按钮的标签设置为字符串s。(3)产生事件按钮可以引发动作事件,当用户单击一个按钮时就引发一个动作事件,希望响应按钮引发的动作事件的程序须把按钮注册给实现了ActionListener接口的动作事件监听者,并为这个接口的actionPerformed(ActionEvent e)方法书写方法体。在方法体中,可调用e.getSource()获取引发动作事件的按钮对象引用,或调用e.getActionCommand()获取按钮的标签或事先为这个按钮设置的命令名。,import java.applet.*;import java.awt.*;impor
33、t java.awt.event.*;public class UsedBtnLabelAction extends Applet implements ActionListener Label prompt;Button btn;public void init()prompt=new Label(你好);btn=new Button(操作);add(prompt);add(btn);btn.addActionListener(this);public void actionPerformed(ActionEvent e)if(e.getSource()=btn)if(prompt.getT
34、ext()=你好)prompt.setText(再见);else prompt.setText(你好);,例 7-6 UsedBtnLabelAction.java,运行结果,3.动作事件(ActionEvent)ActionEvent类只包含一个事件,即执行动作事件ACTION-PERFORMED。ACTION-PERFORMED是引发某个动作执行的事件。能触发该事件的动作有以下四类:(1)点击按钮;(2)双击一个列表中的选项;(3)选择菜单项;(4)在文本框中输入回车。,ActionEvent类的重要方法有:(1)public String getActionCommand()该方法返回引
35、发事件的动作的命令名,该命令名可通过调用setActionCommand()指定给事件源组件,也可使用事件源的缺省命令名。例如一个按钮组件m-Button是ACTION-PERFORMED事件的事件源,如下语句将这个按钮对象的动作命令名设为“命令名”并将它注册给当前的监听者:Button m-Button=new Button(按钮标签);m-Button.setActionCommand(命令名);m-Button.addActionListener(this);,动作事件的监听者需要实现动作,监听者接口的方法为:public void actionPerformed(ActionEvent
36、 e)if(e.getActionCommand()=命令名),注意:setActionCommand()方法与getActionCommand()方法属于不同的类,getActionCommand()方法是ActionEvent类的方法,而setActionCommand()方法是其上发生动作事件的事件源,如按钮、菜单项等的方法。事件源对象也可以不专门调用setActionCommand()方法来指定命令名,此时getActionCommand()方法返回缺省的命令名,例如上面的程序片断如果去掉设置动作命令名的一句,则监听者接口的方法可以写为:public void actionPerfor
37、med(ActionEvent e)if(e.getActionCommand()=按钮标签),可见按钮的缺省命令名就是按钮的标签。使用getActionCommand()方法可以区分产生动作命令的不同事件源,使actionPerformed()方法对不同事件源引发的事件区分对待处理(区分事件的事件源也可以使用getSource()方法,但是这样一来处理事件的代码就与GUI结合得过于紧密,对于小程序尚可接受,对于大程序则不提倡)。,(2)public int getModifiers()如果发生动作事件的同时用户还按了Ctrl、Shift等功能键,则可以调用这个事件的getModifiers(
38、)方法来获得和区分这些功能键,实际上是把一个动作事件再细分成几个事件;把一个命令细分成几个命令。将getModifiers()方法的返回值与ActionEvent类的几个静态常量ALT-MASK,CTRL-MASK,SHIFT-MASK,META-MASK相比较,就可以判断用户按下了哪个功能键。,7.6 文本框、文本区域与文本事件 1.文本事件(TextEvent)TextEvent类只包含一个事件,即代表文本区域中文本变化的事件TEXT-VALUE-CHANGED,在文本区域中改变文本内容。例如,删除字符、键入字符都将引发这个事件。该事件较简单,不需特别判断事件类型的方法和常量。2.文本框与
39、文本域(TextField与TextArea)Java中用于文本处理的基本组件有两种:单行文本框TextField和多行文本区域TextArea,它们都是TextComponent的子类。,(1)创建在创建文本组件的同时可以指出文本组件中的初始文本字符串,如下创建一个10行45列的多行文本区域:TextArea textArea1=new TextArea(10,45);而创建能容纳8个字符,初始字符串为“卡号”的单行文本框可以使用如下的语句:TextField name=new TextField(卡号,8);(2)常用方法先介绍TextComponent中的常用方法,即TextField和
40、TextArea都拥有的常用方法。,用户可以在已创建好的文本区域中自由输入和编辑文本信息,对于用户输入的信息,可以调用TextComponent的getText()方法来获得,这个方法的返回值为一个字符串。如果希望在程序中对文本区域显示的内容赋值,可以调用TextComponent的另一个方法setText()。例如下面的语句:textArea1.setText(你好,欢迎!);将文本区域的内容置为“你好,欢迎!”。,某些情况下需要将文本区域设为不能编辑的。例如,电话卡的卡号是系统自动生成的,不需要也不允许用户随意改动,这时可用如下的语句使对应电话卡卡号的文本框cardNo不可被用户通过界面改
41、动:cardNo.setEditable(false);使用isEditable()方法判断当前的文本区域是否可以被编辑。,TextComponent中还有一些用来指定或获得文本区域中“选定状态”文本的方法,选定状态的文本一般用高亮或反白显示:select(int start,int end)根据指定的起止位置选定一段文本;selectAll():选定文本区域中的所有文本;setSelectionStart()和setSelectionEnd()分别指定选定文本的起、止位置;getSelectionStart()和getSelectionEnd():获得已经选定文本的起、止位置;getSele
42、ctedText()获得选定文本的具体内容(字符串)。,TextField自己的方法:例如某些场合下(如输入密码时)希望文本区域中的内容不如实回显在屏幕上,可以调用如下的方法:TextField tf=new TextField(输入密码);tf.setEchoChar(*);此时,TextField中的每个字符(无论中西文)都被回显成一个星号*,保证看不到其中的实际字符。另外,TextField还定义了echoCharIsSet()确认当前文本框是否处于不回显状态;getEchoChar()获得当前文本框不回显的屏蔽字符。,除了继承TextComponent类的方法,TextArea定义了两
43、个特殊的方法,如下:append(String s)在当前文本区域已有文本的后面添加字符串参数s指定的文本内容;insert(String s,int index)将字符串s插入到已有文本的指定序号处。,(3)事件响应TextField和TextArea的事件响应首先由它们的父类TextComponent决定。TextComponent的事件响应如下:TextComponent可引发一种事件:当用户修改文本区域中的文本,如做文本的添加、删除、修改等操作时,将引发TextEvent对象代表的文本改变事件。在此基础上TextField还比TextArea多产生一种事件,当用户在文本框中按回车时,将
44、引发代表动作事件的ActionEvent事件。TextArea不能产生ActionEvent事件,也没有addActionListener()方法。,若需响应上述两类事件,则需把文本框加入实现了TextListener接口的文本改变事件监听者和实现了ActionListener接口的动作事件监听者:textField1.addTextListener(this);textField1.addActionListener(this);在监听者内部分别定义响应文本改变事件和动作事件的方法:public void textValueChanged(TextEvent e);public void a
45、ctionPerformed(ActionEvent e);来响应文本框引发的文本改变事件和动作事件。,调用e.getSource()可获得引发该事件的文本框的对象引用。调用该文本框的方法,可获得改变后的文本内容:String afterChange=(TextField)e.getSource().getText();对于动作事件,同样可通过调用e.getSource()方法获得用户输入回车的那个文本框的对象引用。,import java.applet.*;import java.awt.*;import java.awt.event.*;public class UsedTextCompo
46、nentEvent extends Applet implements TextListener,ActionListener TextField tf;TextArea ta;public void init()tf=new TextField(45);ta=new TextArea(10,45);add(tf);add(ta);tf.addActionListener(this);tf.addTextListener(this);public void textValueChanged(TextEvent e)if(e.getSource()=tf)ta.setText(TextField
47、)e.getSource().getText();public void actionPerformed(ActionEvent e)if(e.getSource()=tf)ta.setText();,例 7-7 UsedTextComponentEvent.java,7.7 单、复选按钮,列表与选择事件 1.选择事件(ItemEvent)ItemEvent类只包含代表选择项的选中状态发生变化的事件ITEM-STATE-CHANGED。引发这类事件的动作包括:(1)改变列表类List对象选项的选中或不选中状态。(2)改变下拉列表类Choice对象选项的选中或不选中。(3)改变复选按钮类Chec
48、kbox对象的选中或不选中状态。(4)改变检测盒菜单项CheckboxMenuItem对象的选中或不选中状态。,ItmeEvent类的主要方法:(1)public ItemSelectable getItemSelectable()返回引发选中状态变化事件的事件源,例如,选项变化的List对象或选中状态变化的Checkbox对象,这些能引发选中状态变化事件的都是实现了ItemSelectable接口的类的对象,包括List对象、Choice对象、Checkbox对象等。getItemSelectable()返回这些类的对象引用。,(2)public Object getItem()返回引发选中
49、状态变化事件的具体选择项,如选中Choice的具体item,通过调用这个方法可知用户选中了哪个选项。(3)public int getStateChange()返回具体的选中状态变化类型,它的返回值在ItemEvent类的几个静态常量列举的集合之内:ItemEvent.SELECTED:代表选项被选中。ItemEvent.DESELECTED:代表选项被放弃不选。,2.复选按钮(Checkbox)(1)创建复选按钮也叫检测盒,用Checkbox类的对象表示。创建复选按钮对象时可指明其文本说明标签,该文本标签简要地说明了检测盒的意义和作用。Checkbox backg=new Checkbox(
50、背景色);,(2)常用方法每个复选按钮都两种状态:被选中的check状态,未被选中的uncheck状态,复选按钮都只处于这两种状态之一。查看点击选择了复选按钮,可调用Checkbox的方法getState()。若被选中,则返回true,否则返回false。调用Checkbox的另一个方法setState()可以用程序设置是否选中复选按钮。下面的语句使Checkbox处于选中状态。backg.setState(true);,(3)事件响应当用户点击检测盒使其选中状态发生变化时会引发ItemEvent类代表的选择事件。下面的语句:backg.addItemListener(this);把backg