图形用户界面(GUI)

上传人:yo****e 文档编号:116337155 上传时间:2022-07-05 格式:PPT 页数:230 大小:800KB
收藏 版权申诉 举报 下载
图形用户界面(GUI)_第1页
第1页 / 共230页
图形用户界面(GUI)_第2页
第2页 / 共230页
图形用户界面(GUI)_第3页
第3页 / 共230页
资源描述:

《图形用户界面(GUI)》由会员分享,可在线阅读,更多相关《图形用户界面(GUI)(230页珍藏版)》请在装配图网上搜索。

1、 第5部分 图形用户界面-GUI第第5部分部分 图形用户界面(图形用户界面(GUI)文字与图形设计常用组件GUI设计高级组件GUI设计 第5部分 图形用户界面-GUI文字与图形GUI设计1 GUI设计概述设计概述2 绘制文字绘制文字3 Color类类4 Graphics类类 第5部分 图形用户界面-GUI1 GUI设计概述设计概述 图形用户界面(Graphics User Interface,简称GUI)就是为应用程序提供一个图形化的界面。GUI使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令、启动操作,并将系统运行的结果同样以图形的方式显示给用户,操作

2、简便,已经成为目前几乎所有应用软件的既成标准。第5部分 图形用户界面-GUI 为了方便编程人员开发图形用户界面,Java提供了抽象窗口工具包(Abstract Windowing ToolKit,缩写为AWT)和Swing包这两个图形用户界面工具包。编程人员可方便地使用这些类库来生成各种标准图形界面元素并处理图形界面的各种事件。Swing它是围绕着实现它是围绕着实现AWT各个部分的各个部分的API构筑的,构筑的,这保证了所有早期的这保证了所有早期的AWT组件仍然可以使用组件仍然可以使用 AWT组件开发出的界面与平台相关,是依赖系统的实组件开发出的界面与平台相关,是依赖系统的实现。现。Swing

3、组件开发出的外观和感觉与平台无关,完全由组件开发出的外观和感觉与平台无关,完全由Java来实现的。来实现的。第5部分 图形用户界面-GUI1.1 图形用户界面元素分类图形用户界面元素分类 1容器容器 容器是用来组织或容纳其他界面成分和元素的组件。一个容器可以包含许多组件,同时它本身也可以作为一个组件,放进另一容器中。容器是Java中的类,例如框架(JFrame)、面版(JPanel)及滚动面板(JScrollPanel)等类。容器的引入有利于分解图形用户界面的复杂性。第5部分 图形用户界面-GUI 2控制组件控制组件控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控制组件的作用

4、是完成与用户的一次交互,包括接收用户的一个命令(如菜单命令),接收用户输入的一个文本或选择等等。目前常用的控制组件有:选择类:单选按钮、复选按钮、下拉列表;文字处理类:文本框、文本区域;命令类:按钮、菜单等。第5部分 图形用户界面-GUI使用控制组件,通常需要如下的步骤:(1)创建某控制组件类的对象,指定其大小等属性。(2)使用某种布局策略,将该控制组件对象加入到某个容器中的指定位置处。(3)将该组件对象注册给所能产生的事件对应的事件监听程序,重载事件处理方法,实现利用该组件对象与用户交互的功能。第5部分 图形用户界面-GUI1.2 屏幕坐标系屏幕坐标系 文本与图形通过一定的坐标关系显示在屏幕

5、的适当位置上。Java坐标系是一个二维网格,它可以标识屏幕上每个点的坐标位置。坐标单位用像素来度量。一个像素是一台显示器的最小分辨单位。坐标系由一个x坐标(水平坐标)和一个y坐标(垂直坐标)组成。在缺省状态下原点为屏幕左上角坐标(0,0),因此,x坐标是从左向右移动的水平距离,y坐标是从上向下移动的垂直距离。图8.1中的坐标(x,y)表示点与原点的水平距离是x,垂直距离是y。第5部分 图形用户界面-GUI图8.1 Java坐标系00 X轴 Y轴 第5部分 图形用户界面-GUI1.3 与文字图形有关的类与文字图形有关的类 图8.2给出了java.awt包层次的一部分有关文字、颜色和基本图形的类。

6、图中的每一个类都是从类Object直接派生出来的:类Font是用于操作字体的;类Color是用于操作颜色的;类Polygon用于创建多边形;类Graphics用于绘制各种串、线、矩形、圆和其他几何图形。第5部分 图形用户界面-GUI图8.2 java.awt包中的文字图形类(是由Object类派生的)事件类字体类GraphicsComponent颜色类布局管理类java.lang.ObjectCheckboxContainerButtonWindowPanelAppletDialogFrameList图象类菜单类 第5部分 图形用户界面-GUI1.4 Applet的执行程序的执行程序 限于我们

7、目前的知识,在讲述本章的内容时我们以Applet应用程序为所有示例程序的容器,且通过引用或重载Applet类的某些成员方法来实现文字及图形的绘制。为此,有必要先介绍Applet应用程序的执行过程及其所引用的方法。每个Applet应用程序都是Applet类的子类,在实际运行中,浏览器在下载字节码的同时,会自动创建一个用户Applet子类的对象,并在适当事件发生时自动调用该对象的几个主要方法。下面说明这些方法的引用过程。第5部分 图形用户界面-GUI (1)init()方法:当Applet程序启动时自动调用init()方法。init()方法仅用来做初始化操作。用户程序可以重载父类的init()方法

8、,通过init()方法初始化图像文件、声音文件、字体或者其他一些对象等。(2)start()方法:Applet运行init()方法之后将自动调用start()方法,start()方法体现了小应用程序要完成的功能。我们可以重载父类的start()方法,在这个方法体内实现我们程序的功能。(3)paint()方法:它的主要作用是在Applet的界面中显示文字、图形和其他界面元素。浏览器调用paint()方法的事件主要有如下三种。第5部分 图形用户界面-GUI 当浏览器首次显示Applet时,会自动调用paint()方法。当用户调整窗口大小或移动窗口时,浏览器会调用paint()方法。当repaint

9、()方法被调用时,系统将首先调用update()方法将Applet对象所占用的屏幕空间清空,然后调用paint()方法重画。第5部分 图形用户界面-GUI (4)stop()方法:当用户将浏览Applet程序所在的Web页面切换到其他页面时,浏览器会自动调用stop()方法,让Applet程序终止运行。如果用户又回到Applet程序所在的Web页面时,则浏览器将重新启动Applet程序的start()方法。(5)destroy():当用户关闭Applet程序窗口时,浏览器会自动执行此方法,结束程序,释放所占资源。第5部分 图形用户界面-GUI2 绘绘 制制 文文 字字2.1 绘制文字的成员方法

10、绘制文字的成员方法 由于字符串可以用字符串对象、字符数组、字节数组三种不同形式表示,故Java在Graphics类中相应地提供了三个成员方法来绘制这三种不同形式的字符串。第5部分 图形用户界面-GUI【示例程序j8_1.java】使用三个成员方法绘制“WELCOME TO XIAN”。import java.applet.Applet;import java.awt.Graphics;public class j8_1 extends Applet private String s=WELCOME!;private char c=T,O,a,e,t;private byte b=d,4,X,I

11、,047,A,N;public void paint(Graphics g)/覆盖Applet的成员方法 g.drawString(s,50,25);g.drawChars(c,0,2,50,50);g.drawBytes(b,2,5,50,75);第5部分 图形用户界面-GUI2.2 Font类类 1.Font类的构造方法类的构造方法 Font类用来描述字体的名称(Name)、大小(Size)和样式(Style)。使用Font类的构造方法创建一个Font类的对象,其格式如下:Font(String fontname,int style,int size)其中:fontname为字型名,如宋体

12、、黑体、楷体、Arial、Courier、TimesRoman、Helvetica等;style为字体样式,如粗体(BOLD)、斜体(ITALIC)、正常体(PLAIN);Size为用像素点表示的字体大小。第5部分 图形用户界面-GUI 2.设置字体设置字体 可以用java.awt.Graphics类的成员方法来设置自己希望使用的字体,其格式如下:setFont(Font myFont);【示例程序j8_2.java】使用不同的字体绘制文字。import java.awt.*;import java.applet.Applet;public class j8_2 extends Applet

13、第5部分 图形用户界面-GUI Font f1=new Font(TimesRoman,Font.BOLD,16);/字体为TimesRoman,字体样式加粗 Font f2=new Font(Courir,Font.ITALIC,24);/字体为Courir,字体样式倾斜 Font f3=new Font(Helvetica,Font.PLAIN,14);/常规 String hStr=Courir;public void paint(Graphics g)第5部分 图形用户界面-GUI g.setFont(f1);g.drawString(TimesRoman,20,50);g.setFo

14、nt(f2);g.drawString(hStr,20,100);g.setFont(f3);g.drawString(Helvetica,20,150);第5部分 图形用户界面-GUI图2 程序j8_2的运行结果 第5部分 图形用户界面-GUI 3.Font类的成员方法类的成员方法 创建一个Font类对象后,就可以使用Font类提供的成员方法来获取字体、字型等方面的信息。getStyle();getName();getSize();第5部分 图形用户界面-GUI【示例程序j8_3.java】获取字体信息。import java.applet.Applet;import java.awt.Gr

15、aphics;import java.awt.Font;public class j8_3 extends Applet Font f=new Font(Courier,Font.ITALIC+Font.BOLD,24);/字体样式倾斜加粗 public void paint(Graphics g)int style,size;第5部分 图形用户界面-GUI String s,name;g.setFont(f);style=f.getStyle();/得到字体样式 if(style=Font.PLAIN)s=Plain;else if(style=Font.BOLD)s=Bold;else i

16、f(style=Font.ITALIC)s=Italic;else s=Bold italic;size=f.getSize();/得到字体大小 s+=size+point;name=f.getName();/得到字体名称 s+=name;g.drawString(s,10,50);g.drawString(Font family is+f.getFamily(),10,100);第5部分 图形用户界面-GUI图3 程序j8_3的运行结果 第5部分 图形用户界面-GUI【示例程序j8_4.java】使用识别字型字体的成员方法。import java.applet.Applet;import j

17、ava.awt.Graphics;import java.awt.Font;public class j8_4 extends Applet Font f=new Font(Courier,Font.ITALIC+Font.BOLD,24);public void paint(Graphics g)String s;g.setFont(f);第5部分 图形用户界面-GUI if(f.isPlain()=true)s=Font is plain.;else if(f.isBold()=true&f.isItalic()=false)s=Font is bold.;else if(f.isItal

18、ic()=true&f.isBold()=false)s=Font is italic.;else s=Font is bold italic.;g.drawString(s,25,25);第5部分 图形用户界面-GUI图4 程序j8_4的运行结果 第5部分 图形用户界面-GUI3 Color 类类 3.1 Color类的构造方法类的构造方法 不论使用哪个构造方法来创建Color对象,都需要指定新建颜色中的R(红)、G(绿)、B(蓝)三色的比例。Java提供的这三个构造方法用不同的方式确定RGB的比例,可以使编程者从256的3次方(约16 000 000)种颜色中进行选择。一个RGB值由三部分

19、组成,分别为红,绿,兰或(RGB)。RGB值中某一部分的值越大,那种特定颜色的量就越大。3.2 Color类数据成员常量类数据成员常量 用户除了可以使用构造方法指定Color的RGB值外,Java还对一些常用的颜色提供了如表所示的Color类数据成员常量。第5部分 图形用户界面-GUI表表 Color类类static数据成员常量和数据成员常量和RGB值值颜色数据成员常量颜 色RGB值public final static Color red红255,0,0public final static Color green绿0,255,0public final static Color blue蓝

20、0,0,255public final static Color black黑0,0,0public final static Color white白255,255,255public final static Color yellow黄255,255,0public final static Color orange橙255,200,0public final static Color cyan青蓝0,255,255public final static Color magenta洋红255,0,255public final static Color pink淡红色255,175,175

21、public final static Color gray灰128,128,128public final static Color lightGray浅灰192,192,192public final static Color darkGray深灰64,64,64 第5部分 图形用户界面-GUI除了Color类自身拥有的成员方法外,还可以用java.awt.Graphics类的方法设定颜色或获取颜色。这些方法及其功能如下:setColor(Color c):设定前景颜色,c代表颜色。setColor(new Color(int r,int g,int b):设定前景颜色的另一个方法。set

22、Background(Color c):设定背景颜色,c代表颜色。getColor():获取当前所使用的颜色。3.3 Color类的成员方法类的成员方法 第5部分 图形用户界面-GUI3.4 应用举例应用举例【示例程序j8_6.java】使用整型数设置字符颜色。import java.applet.Applet;import java.awt.Graphics;import java.awt.Color;public class j8_6 extends Applet public void paint(Graphics g)第5部分 图形用户界面-GUI int red,green,blue

23、;red=99;blue=120;green=125;g.setColor(new Color(red,green,blue);g.drawString(Welcome to Xi047an,25,75);showStatus(Current RGB:+g.getColor().toString();第5部分 图形用户界面-GUI图6 程序j8_6的运行结果 第5部分 图形用户界面-GUI【示例程序j8_8.java】使用Color类的数据成员常量设置字符颜色。import java.applet.Applet;import java.awt.Graphics;import java.awt.

24、Color;public class j8_8 extends Applet Color c;c=Color.blue;public void paint(Graphics g)第5部分 图形用户界面-GUI g.setColor(c);g.drawString(Welcome to Xi047an,25,75);showStatus(Current RGB:+String.valueOf(c.getRed()+String.valueOf(c.getGreen()+String.valueOf(c.getBlue();第5部分 图形用户界面-GUI图8 程序j8_8的运行结果 第5部分 图形

25、用户界面-GUI4 Graphics 类类4.1 绘制线段与矩形绘制线段与矩形 线段与矩形是最常用的几何图形之一,Graphics类中提供了绘制直线、平面矩形、圆角矩形、三维立体矩形等图形的成员方法。第5部分 图形用户界面-GUI【示例程序j8_9.java】绘制直线。import java.applet.Applet;import java.awt.Graphics;public class j8_9 extends Applet public void paint(Graphics g)g.drawLine(25,25,100,100);该程序的运行结果如图8.13所示。第5部分 图形用户

26、界面-GUI图9 程序j8_9的运行结果 第5部分 图形用户界面-GUI【示例程序j8_10.java】绘制矩形。import java.applet.Applet;import java.awt.Graphics;public class j8_10 extends Applet public void paint(Graphics g)g.drawRect(20,25,100,100);g.fillRect(150,25,100,100);该程序的运行结果如图10所示。第5部分 图形用户界面-GUI图10 程序j8_10的运行结果 第5部分 图形用户界面-GUI示例程序j8_12.java

27、】绘制三维矩形。import java.applet.Applet;import java.awt.Graphics;import java.awt.Color;public class j8_12 extends Applet public void paint(Graphics g)g.setColor(Color.red);g.draw3DRect(10,10,100,100,true);g.draw3DRect(130,10,100,100,false);g.fill3DRect(10,120,100,100,true);g.fill3DRect(130,120,100,100,fal

28、se);该程序的运行结果如图8.16所示。第5部分 图形用户界面-GUI图12 程序j8_12的运行结果 第5部分 图形用户界面-GUI 常用组件GUI设计1 Swing概述概述2 事件响应原理事件响应原理3 J组件组件 第5部分 图形用户界面-GUI1 Swing 概概 述述图9.1 图形用户界面中常用的组件 第5部分 图形用户界面-GUI1.1 JApplet 本章主要介绍javax.Swing的“J组件”,应用程序均以JApplet小程序为例。JApplet的使用与Applet小程序相似,它们与HTML文件的配合没有什么差别,差别仅在默认布局策略与个别方法的使用上。1.2 Swing中常

29、用的包中常用的包 由于Swing功能相当强大且复杂,考虑到功能分解的原则,Java系统将Swing按不同功能分为若干个包,它们分别针对于不同的组件及事件。第5部分 图形用户界面-GUI1.3 常用组件的继承关系常用组件的继承关系 由于本章所述组件所使用的成员方法主要是继承其直接父类或更高层父类的成员方法,为了正确地使用这些组件,有必要了解每个组件的继承关系。本章所述组件的继承关系如下:java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent 第5部分 图形用户界面-GUI javax.swing.

30、JLabel javax.swing.JTextField javax.swing.JTextArea javax.swing.JList javax.swing.JComboBox javax.swing.AbstractButton javax.swing.JButton javax.swing.JToggleButton javax.swing.JCheckBox javax.swing.JRadioButton 第5部分 图形用户界面-GUI2 事件响应原理事件响应原理 设计和实现图形用户界面的工作主要有两个:一:创建组成界面的各种成分和元素,指定它们的属性和位置关系,根据具体需要排列

31、它们,从而构成完整的图形用户界面的物理外观;二:定义图形用户界面的事件和各界面元素对不同事件的响应,从而实现图形用户界面与用户的交互功能。第5部分 图形用户界面-GUI 图形用户界面之所以能为广大用户所喜爱原因之一就在于图形用户界面的事件驱动机制,它可以根据产生的事件来决定执行相应的程序段。事件事件(event):代表了某对象可执行的操作及其状态的变化。代表了某对象可执行的操作及其状态的变化。例如:在图形用户界面中,用户可以通过移动鼠标对特定图形界面元素进行单击、双击等操作来实现输入/输出操作。事件源事件源指一个事件的产生者。指一个事件的产生者。事件处理器事件处理器接收事件对象并对其进行处理的

32、对象。接收事件对象并对其进行处理的对象。第5部分 图形用户界面-GUI2.1 委托事件模型委托事件模型 Java采用委托事件模型来处理事件。每个组件会注册一个或多个监听者,监听者就是实现每个组件会注册一个或多个监听者,监听者就是实现了了Listener接口的类。接口的类。事件只由该组件所注册的监听者来接收和处理事件只由该组件所注册的监听者来接收和处理委托事件模型的特点:是将事件的处理委托给独立的对象,而不是组件本身,从而将使用者界面与程序逻辑分开。整个“委托事件模型”由产生事件的对象(事件源)、事件对象及监听者对象之间的关系所组成。监听者对象(listener)就是用来处理事件的对象。监听者对

33、象等候事件的发生,并在事件发生时收到通知。第5部分 图形用户界面-GUI2.2 Swing组件的事件及监听者组件的事件及监听者 不同事件源上发生的事件种类不同,不同的事件由不同的监听者处理。注意:对应不同事件需要不同的事件监听者;每个事件监听者都有相应的成员方法;我们处理事件的程序代码要写在对应的成员方法体中。第5部分 图形用户界面-GUI2.3 Java.awt事件类继承关系事件类继承关系java.util.EventObject类EventObject类是所有事件对象的基础类,所有的事件类都是由它派生出来的。public class EventObjectpublic class Even

34、tObject implements implements java.io.Serializablejava.io.Serializable protected transient Object source;protected transient Object source;public EventObjectpublic EventObject(Object source)(Object source);public Object getSourcepublic Object getSource()();public String toStringpublic String toStrin

35、g()();java.awt.AWTEvent类和AWT有关的所有事件类都由java.awt.AWTEvent类派生,它也是EventObject类的子类。AWT事件共有10类,可以归为两大类:低级事件和高级事件。第5部分 图形用户界面-GUI低级事件 ComponentEvent(组件事件:组件尺寸的变化,移动)ContainerEvent(容器事件:组件增加,移动)WindowEvent(窗口事件:关闭窗口,图标化)FocusEvent(焦点事件:焦点的获得和丢失)KeyEvent(键盘事件:键按下、释放)MouseEvent(鼠标事件:鼠标单击,移动)高级事件(语义事件)ActionEv

36、ent(动作事件:按钮按下,TextField中按Enter键)AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)ItemEvent(项目事件:选择项目)TextEvent(文本事件,文本对象改变)第5部分 图形用户界面-GUI对于每类事件,都有一个事件监听器接口,该接口必须由想接收这个事件的类来实现。每个监听器接口都定义了一个或多个方法。当发生特定的事件时,就会调用相应的方法。监听器的注册与注销 public void add(listener);public void remove(listener);下表列出了各事件类型,并给出了每个类型对应的监听器接口名称,以及所

37、要求定义的方法。第5部分 图形用户界面-GUI事件监听器类型接口名称方法 ActionActionListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)Mouse motionMouseMotionListener mouseDragged(MouseEvent)mouseMoved(MouseEvent)Mouse buttonMouseListener mousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseE

38、vent)mouseExited(MouseEvent)mouseClicked(MouseEvent)第5部分 图形用户界面-GUI事件监听器类型接口名称方法 KeyKeyListener keyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListener focusGained(FocusEvent)focusLost(FocusEvent)AdjustmentAdjustmentListener adjustmentValueChanged(AdjustmentEvent)ComponentCompo

39、nentListener componentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)第5部分 图形用户界面-GUI事件监听器类型接口名称方法 WindowWindowListenerWindowClosing(WindowEvent)WindowOpened(WindowEvent)WindowClosed(WindowEvent)WindowIconified(WindowEvent)WindowDeico

40、nified(WindowEvent)WindowActivated(WindowEvent)WindowDeactivated(WindowEvent)ContainerContainerListenercomponentAdded(ContainerEvent)componentRemoved(ContainerEvent)TextTextListenertextValueChanged(TextEvent)第5部分 图形用户界面-GUI2.4 AWT中的事件与事件监听者中的事件与事件监听者 使用Swing时,鼠标和键盘操作、窗口的变化、组件的增加或删除等都是比较低层的事件,对于这些事件我

41、们必须使用AWT包提供的处理方法来处理。所有的Swing组件都是java.awt.Component的子类,它们具有如下继承关系:java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing的各种swing组件 第5部分 图形用户界面-GUI 所以,可以利用java.awt.Component类与java.awt.Container类提供的事件及事件监听者来处理诸如鼠标和键盘操作等低层事件。同理,对于AWT中的不同事件需要不同的事件监听者,而每个监听者都有相应的成员方法,我们处

42、理事件的程序代码要写在对应的成员方法体中。第5部分 图形用户界面-GUI3 J 组组 件件 3.1 JLable 组组 件件 JLable组件被称为标签,它是一个静态组件,也是标准组件中最简单的一个组件。每个标签用一个标签类的对象表示,可以显示一行静态文本。标签只起信息说明的作用,而不接受用户的输入,也无事件响应。第5部分 图形用户界面-GUI 3.2.1JButton组件与组件与JToggleButton组件的区别组件的区别 JButton组件与JToggleButton组件通常被称为按钮,它是一个具有按下、抬起两种状态的组件。用户可以指定按下按钮(单击事件)时所执行的操作(事件响应)。按钮

43、上通常有一行文字(标签)或一个图标以表明它的功能。此外,Swing组件中的按钮还可以实现下述效果:(1)改变按钮的图标,即一个按钮可以有多个图标,可根据Swing按钮所处的状态而自动变换不同的图标。(2)为按钮加入提示,即当鼠标在按钮上稍做停留时,在按钮边可出现提示,当鼠标移出按钮时,提示自动消失。(3)在按钮上设置快捷键。(4)设置默认按钮,即通过回车键运行此按钮的功能。3.2 JButton组件与组件与JToggleButton组件组件 第5部分 图形用户界面-GUI JToggleButton按钮与JButton按钮的区别仅在于:当按下JButton按钮并释放鼠标后,按钮会自动弹起;按下

44、JToggleButton按钮并释放鼠标后,按钮不会自动弹起,除非再按一次。第5部分 图形用户界面-GUI3.2.2 ActionEvent事件及其响应事件及其响应 按照Java的委托事件模型,当我们在所设计的用户界面上按下一个按钮时会激发一个事件,这个事件称为动作事件。动作事件由AWT的ActionEvent类的方法来处理。1动作事件动作事件 ActionEvent类含有ACTION_PERFORMED事件,它是引发某个动作的执行事件。能触发这个事件的动作包括:单击按钮;双击一个列表中的选项;选择菜单项;在文本框中输入回车等。第5部分 图形用户界面-GUI 2ActionEvent类可使用的

45、主要方法类可使用的主要方法 getSource()方法:用来获取引发事件的对象名。是EventObject类提供的。getActionCommand()方法:用来获取对象的标签或事先为这个对象设置的命令名。是ActionEvent类提供的。由于ActionEvent类继承了EventObject类,因此,ActionEvent类可以使用这两个方法。第5部分 图形用户界面-GUI 3.2.3事件响应事件响应 当用户点击对象时,就会引发ActionEvent类代表的动作事件。例如,下面的语句:对象名.addActionListener(this);注册事件源对象的监听者对象为this,而且要求th

46、is对象的类必须声明该类并实现ActionListener接口。当事件发生时,引发的事件将被此事件的监听者监听到,并引用ActionListener的actionPerformed(ActionEvent e)方法响应动作事件。在此方法体中可以引用ActionEvent事件的getSource()方法来获取引发事件的对象,也可以引用getActionCommand()方法来获取对象标签或事先为这个对象设置的命令名。用户可在actionPerformed()方法体中写入处理此事件的程序代码。第5部分 图形用户界面-GUI3.2.4 应用举例应用举例【示例程序j9_1.java】编写一个单击按钮时

47、改变标签文本与按钮文本的内容的程序。import java.awt.*;import javax.swing.*;import java.awt.event.*;/声明该类实现ActionListener 接口,监听者对象是j9_1类的对象public class j9_1 extends JApplet implements ActionListener /JApplet是Applet的子类 第5部分 图形用户界面-GUI Container cp=getContentPane();/创建窗口容器对象 Icon ro=new ImageIcon(g1.gif);/创建图标对象 Icon ge

48、=new ImageIcon(g2.gif);Icon pr=new ImageIcon(g3.gif);JButton bt=new JButton();/创建按钮对象 Icon icon=new ImageIcon(g4.jpg);JLabel lb=new JLabel(Java,icon,JLabel.CENTER);/创建标签对象 public void init()第5部分 图形用户界面-GUI bt.setRolloverEnabled(true);/将按钮图标变化功能打开 bt.setText(OK);/添加按钮文本 bt.setHorizontalTextPosition(J

49、Label.CENTER);/将按钮文字放在图标中间 bt.setVerticalTextPosition(JLabel.BOTTOM);/设置按钮文字在图标下方 cp.add(lb,BorderLayout.NORTH);/添加标签在JApple界面的北部位置上 cp.add(bt,BorderLayout.SOUTH);bt.setIcon(ge);/设置鼠标离开按钮的图标 bt.setRolloverIcon(ro);/设置鼠标在按钮上的图标 bt.setPressedIcon(pr);/设置鼠标按下按钮的图标 bt.addActionListener(this);/注册bt的监听者对象

50、this 第5部分 图形用户界面-GUI /actionPerformed()方法在单击bt时被系统自动调用 public void actionPerformed(ActionEvent e)if(e.getSource()=bt)/判断动作事件是否由bt1引发的 if(lb.getText()=Hello)/修改标签文本 lb.setText(“你好!”);else lb.setText(Hello);if(bt.getText()=OK)/修改按钮文本 bt.setText(确定);else bt.setText(OK);第5部分 图形用户界面-GUI图9.2 程序j9_1的运行结果 第

51、5部分 图形用户界面-GUI 3.3 JCheckBox组件和组件和JRadioButton组件组件 3.3.1 JCheckBox组件组件JCheckBox组件被称为复选框(也称检测框),它提供“选中/ON”和“未选中/OFF”两种状态。用户点击某复选框就会改变该复选框原有的状态。第5部分 图形用户界面-GUI 3.3.2JRadioButton组件组件 JRadioButton组件被称为选项按钮,在Java中JRadioButton组件与JCheckBox组件功能完全一样,只是图形不同,复选框为方形图标,选项按钮为圆形图标。由于目前所使用软件的RadioButton多为单选按钮,即在同类的

52、一组组件中,用户只能选择其中之一为ON,其余为OFF。Java为了与其他系统一致,专门提供了javax.swing.ButtonGroup类,这个类的功能就是实现诸如JRadioButton、JRadioButtonMenuItem与JToggleButton等组件的多选一功能。ButtonGroup类可被AbstractButton类的子类所使用。第5部分 图形用户界面-GUI3.3.3 ItemEvent事件事件 1选择事件选择事件 ItemEvent类只包含一个事件ITEM_STATE_CHANGED,引发这类事件的动作包括:(1)改变复选框JCheckbox对象的选中或不选中状态;(2

53、)改变单选按钮JRadioButton对象的选中或不选中状态;(3)改变下拉列表框JComboBox对象中选项的选中或不选中状态;(4)改变菜单项JMenuItem对象中选项的选中或不选中状态;(5)改变JCheckboxMenuItem对象中选项的选中或不选中状态。第5部分 图形用户界面-GUI 2ItemEvent类的主要方法类的主要方法 (1)ItemSelectable getItemSelectable()。getItemSelectable()方法返回引发选中状态变化的事件源,例如JCheckbox对象。能引发选中状态变化的事件都必须是实现了ItemSelectable接口类的对象

54、,该方法的返回值就是这些类的对象的引用。此外,ItemEvent类的事件也可以使用其父类EventObject类提供的getSource()方法返回引发选中状态变化的事件源。第5部分 图形用户界面-GUI (2)Object getItem()。getItem()方法返回引发选中状态变化事件的具体选择项,例如JComboBox中的具体item。通过调用这个方法可以知道用户选中了哪个选项。(3)int getStateChange()。getStateChange()方法返回此组件到底有没有被选中。它的返回值是一个整型值,通常用ItemEvent类的静态常量SELECTED(代表选项被选中)和D

55、ESELECTED(代表选项被放弃或不选)来表达。第5部分 图形用户界面-GUI 3事件响应事件响应 当用户点击对象使其选中状态发生变化时,就会引发ItemEvent类代表的选择事件。例如下面的语句:对象名.addItemListener(this);注册事件源对象的监听者对象为this,而且要求this对象的类必须声明该类实现ItemListener接口。当事件发生时,引发的事件将被此事件的监听者监听到,并引用ItemListener中的itemStateChanged(ItemEvent e)方法响应对象的状态改变。在此方法体中,引用ItemEvent事件的e.getItemSelecta

56、ble()方法以获得引发选择事件的事件源对象,再引用getStateChange()方法获取选择事件之后的状态。用户在itemStateChanged()方法体中编写处理事件的程序代码。第5部分 图形用户界面-GUI3.3.4 应用举例应用举例 【示例程序j9_2.java】根据复选框及选择按钮来改变标签组件的文本大小及颜色。import javax.swing.*;import java.awt.*;import java.awt.event.*;public class j9_2 extends JApplet implements ItemListener,ActionListener

57、int i1=0,i2=0,i3=0;int fonti=10;第5部分 图形用户界面-GUI Font font;Container ctp=getContentPane();JLabel lb=new JLabel(请选择);JCheckBox cb1,cb2,cb3;/声明复选框对象 JRadioButton r1,r2,r3;/声明按钮对象 ButtonGroup bg=new ButtonGroup();/创建按钮组对象,实现JRadioButton多选一功能 public void init()ctp.setLayout(new FlowLayout();/设置布局方式为流式布局

58、cb1=new JCheckBox(红色,false);/创建复选框 cb1.addItemListener(this);/注册cb给监听者this 第5部分 图形用户界面-GUI ctp.add(cb1);/添加复选框在界面上 cb2=new JCheckBox(绿色,false);cb2.addItemListener(this);ctp.add(cb2);cb3=new JCheckBox(蓝色,false);cb3.addItemListener(this);ctp.add(cb3);r1=new JRadioButton(10);r1.addActionListener(this);

59、ctp.add(r1);/加载按钮到界面上 第5部分 图形用户界面-GUI r2=new JRadioButton(16);r2.addActionListener(this);ctp.add(r2);r3=new JRadioButton(24);r3.addActionListener(this);ctp.add(r3);bg.add(r1);/加载按钮到按钮组 bg.add(r2);bg.add(r3);ctp.add(lb);/加载标签到界面上 第5部分 图形用户界面-GUIpublic void itemStateChanged(ItemEvent e)JCheckBox cbx=(

60、JCheckBox)e.getItem();if(cbx.getText()=红色)if(e.getStateChange()=e.SELECTED)i1=255;/判断组件是否被选 else i1=0;if(cbx.getText()=绿色)if(e.getStateChange()=e.SELECTED)i2=255;else i2=0;if(cbx.getText()=蓝色)if(cbx.isSelected()i3=255;/判断组件是否被选 else i3=0;font=new Font(宋体,Font.BOLD,fonti);lb.setFont(font);lb.setForeg

61、round(new Color(i1,i2,i3);第5部分 图形用户界面-GUIpublic void actionPerformed(ActionEvent e)String rbt=e.getActionCommand();if(rbt=10)fonti=10;else if(rbt=16)fonti=16;else fonti=24;font=new Font(宋体,Font.BOLD,fonti);lb.setFont(font);lb.setForeground(new Color(i1,i2,i3);第5部分 图形用户界面-GUI图 程序j9_2的运行结果 第5部分 图形用户界面

62、-GUI3.4.2 事件响应事件响应 JComboBox组件能够响应的事件分为选择事件与动作事件。若用户选取下拉列表中的选择项时,则激发选择事件,使用ItemListener事件监听者进行处理;若用户在JComboBox上直接输入选择项并回车时,则激发动作事件,使用ActionListener事件监听者进行处理。下面通过一个具体的程序来说明按钮的事件响应。3.4 JComboBox组件组件3.4.1 JComboBox组件组件 JComboBox组件称为下拉列表组合框。第5部分 图形用户界面-GUI 【示例程序j9_3.java】在JComboBox组件中添加4个学生的名字选项,当点击下拉列表

63、选择项时得到学生的名字,将他的成绩用标签文本显示。import javax.swing.*;import java.awt.*;import java.awt.event.*;public class j9_3 extends JApplet implements ItemListener Container ctp=getContentPane();JLabel lb1=new JLabel(姓名:),lb2=new JLabel(英语:),第5部分 图形用户界面-GUI lb3=new JLabel();String name=李林,赵欣,张扬,童梅,score=80,94,75,87;J

64、ComboBox cbx=new JComboBox();/创建下拉式列表框对象 public void init()ctp.setLayout(new FlowLayout();/设置流式布局 for(int j=0;jname.length;j+)/添加选项到下拉式列表框对象中 cbx.addItem(namej);ctp.add(lb1);ctp.add(cbx);/添加下拉式列表框对象到容器上 第5部分 图形用户界面-GUI cbx.addItemListener(this);/注册cbx给监听对象 ctp.add(lb2);ctp.add(lb3);public void itemS

65、tateChanged(ItemEvent e)int c=0;String str=(String)e.getItem();/获取所选项给str for(int i=0;iname.length;i+)if(str=namei)/判断str是否是name数组中某个元素的内容 c=cbx.getSelectedIndex();/将该选项的下标给c lb3.setText(scorec);/获取该学生的成绩 第5部分 图形用户界面-GUI程序说明:下拉式列表框产生ItemEvent代表的选择事件。该程序中的语句cbx.addItemListener(this);表示注册JComboBox类的对象

66、cbx给监听者对象。当用户单击下拉列表的某个选项时,系统自动产生一个包含这个事件有关信息的ItemEvent类的对象e,并把该对象作为实际参数传递给被自动调用的监听者的选择事件响应方法:itemStateChanged(ItemEvent e)。在这个方法中通过调用ItemEvent 事件的方法e.getItem()获得引发当前选择事件的下拉列表事件源(被选中的项),再调用getSelectedIndex()获取该选项的下标值,从而得到name数组的下标值,最终将这个元素的内容作为新的标签文本输出。第5部分 图形用户界面-GUI图 j9_3运行结果 第5部分 图形用户界面-GUI3.5 JList 组组 件件 JList称为列表组件,它将所有选项放入列表框中。如果将JList放入滚动面板(JScrollPane)中,则会出现滚动菜单效果。利用JList提供的成员方法,用户可以指定显示在列表框中的选项个数,而多余的选项则可通过列表的上下滚动来显现。JList组件与JComboBox组件的最大区别是:JComboBox组件一次只能选择一项,而JList组件一次可以选择一项或多项。选择多项时

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!