java语言学习后续.ppt
《java语言学习后续.ppt》由会员分享,可在线阅读,更多相关《java语言学习后续.ppt(301页珍藏版)》请在三一办公上搜索。
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 对话框、组件事件与焦点事件7.15 小结习题,本章介绍Java程序中图形用户界面(GUI)的设计与实现。图形用户界面是程序与用户交互的窗口。每个图形界面下的Java程序都必须设计、建立自己的图形用户界面
2、并利用它接受用户的输入,向用户输出程序运行的结果。本章将介绍图形用户界面的基本组成和主要操作,包括绘制图形,显示动画,使用AWT包各组件和实现Java的事件处理功能等。,7.1 图形用户界面概述设计和构造用户界面,是软件开发中的一项重要工作。用户界面是计算机的使用者用户与计算机系统交互的接口,用户界面功能是否完善,使用是否方便,将直接影响到用户对应用软件的使用。图形用户界面(graphics user interface)简称GUI,使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形的方式显示给用户。图形用户界面操作
3、简便,省去了字符界面用户必须记忆各种命令的麻烦,已经成为目前几乎所有应用软件的既成标准。所以,学习设计和开发图形用户界面,是软件开发人员必修的一课。,随着图形用户界面的普及和界面元素标准化程度的提高,许多辅助设计和实现图形用户界面的方法和工具也相应出现,例如,可视化编程方法允许设计人员直接绘出图形界面,然后交给专门的工具自动编码生成这个图形界面,免除了开发者的许多编程负担,目前许多应用软件开发工具都具有可视化编程的功能。Java语言中,为了方便图形用户界面的开发,设计了专门的类库来生成各种标准图形界面元素和处理图形界面的各种事件。这个用来生成图形用户界面的类库就是java.awt包。AWT是a
4、bstract window toolkit(抽象窗口工具集)的缩写。,所谓抽象,是因为Java是一种跨平台的语言,要求Java程序能在不同的平台系统上运行,这对于图形用户界面尤其困难。为了达到这个目标,AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行。正如Java虚拟机使得Java程序独立于具体的软硬件平台一样,“抽象窗口”使得开发人员所设计的界面独立于具体的界面实现。也就是说,开发人员用AWT开发出的图形用户界面可以适用于所有的平台系统。当然,这仅是理想情况。实际上AWT的功能还不是很完全,Java程序的图形用户界面在不同的平台上(例如,在不同的浏览器中)可能会出现不同的运
5、行效果,如窗口大小、字体效果将发生变化等。,首先考察一下图形用户界面的构成。简单地说,图形用户界面就是一组图形界面成分和界面元素的有机组合,这些成分和元素之间不但外观上有着包含、相邻、相交等物理关系,内在的也有包含、调用等逻辑关系,它们互相作用、传递消息,共同组成一个能响应特定事件、具有一定功能的图形界面系统。,设计和实现图形用户界面的工作主要有两个:创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要排列它们,从而构成完整的图形用户界面的物理外观。定义图形用户界面的事件和各界面元素对不同事件的响应,从而实现图形用户界面与用户的交互功能。Java中构成图形用户界面的各种元素和成分
6、可以粗略地被分为三类:容器、控制组件和用户自定义成分。,1.容器容器是用来组织其他界面成分和元素的单元。一般说来一个应用程序的图形用户界面首先对应于一个复杂的容器,如一个窗口。这个容器内部将包含许多界面成分和元素,这些界面元素本身也可能又是一个容器,这个容器再进一步包含它的界面成分和元素,依此类推就构成一个复杂的图形界面系统。容器的引入有利于分解图形用户界面的复杂性,当界面的功能较多时,使用层层相套的容器是非常有必要的。,2.控制组件与容器不同,控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控制组件的作用是完成与用户的一次交互,包括接收用户的一个命令(如菜单命令),接收用户的
7、一个文本或选择输入,向用户显示一段文本或一个图形,等等。从某种程度上来说,控制组件是图形用户界面标准化的结果,目前常用的控制组件有选择类的单选按钮、复选按钮、下拉列表;有文字处理类的文本框、文本区域;有命令类的按钮、菜单等。其中文本框、按钮和标签是前面使用过的GUI组件。,使用控制组件,通常需要如下的步骤:(1)创建某控制组件类的对象,指定其大小等属性。(2)使用某种布局策略,将该控制组件对象加入到某个容器中的某指定位置处。(3)将该组件对象注册给它所能产生的事件对应的事件监听者,重载事件处理方法,实现利用该组件对象与用户交互的功能。严格说来,容器也是一种控制组件,因为一个容器也可以被视为组件
8、而包含在其他容器的内部。,3.用户自定义成分除了上述的标准图形界面元素,编程人员还可以根据用户的需要设计一些用户自定义的图形界面成分,例如绘制一些几何图形、使用标志图案等。用户自定义成分由于不能像标准界面元素一样被系统识别和承认,所以通常只能起到装饰、美化的作用,而不能响应用户的动作,也不具有交互功能。,7.2 用户自定义成分本节主要介绍如何利用Java类库中的类及其方法来绘制用户自定义的图形界面成分。编程人员可以利用这些方法自由地绘制图形和文字,也可以将已经存在的图形、动画等加载到当前程序中来。绘制图形和文字将要用到前面已经接触过的类Graphics。,Graphics是java.awt包中
9、一个类,其中包括了很多绘制图形和文字的方法。当一个Applet运行时,执行它的浏览器会自动为它创建一个Graphics类的实例,利用这个实例,就可以在Applet中随意绘制图形和文字。实际上Applet本身就是一个图形界面的容器。而如果希望在图形界面的Java Application程序中绘制图形,则需要创建一个Canvas类的对象加入到这个Application程序的图形界面容器中,Canvas对象也拥有一个与Applet类的paint()方法相同的paint()方法,利用系统传递给这个paint()方法的Graphics类参数对象就可以在Application程序的图形用户界面中绘制各种图
10、形和文字。,7.2.1 绘制图形利用Graphics类可绘制的图形有直线、各种矩形、多边形、圆和椭圆等。下面的例子综合了这些方法。例 7-1 DrawFigures.java 1:import java.awt.*;2:import java.applet.Applet;3:public class DrawFigures extends Applet4:5:public void paint(Graphics g)6:7:g.drawLine(30,5,40,5);/画直线,8:g.drawRect(40,10,50,20);/画矩形框(左上角x坐标,左上角y坐标,x轴尺寸,y轴尺寸)9:g
11、.fillRect(60,30,70,40);/画实心矩形10:g.drawRoundRect(110,10,130,50,30,30);/画圆角矩形框11:g.drawOval(150,120,70,40);/画椭圆形框(左上角x坐标,左上角y坐标,x轴尺寸,y轴尺寸),若x轴尺寸与y轴尺寸相等,则画出圆形12:g.fillOval(190,160,70,40);/画实心椭圆13:g.drawOval(90,100,50,40);/画椭圆框14:g.fillOval(130,100,50,40);/画实心椭圆15:drawMyPolygon(g);/自定义的画多边形的方法16:g.drawS
12、tring(They are figures!,100,220);,17:18:public void drawMyPolygon(Graphics g)19:20:int xCoords=30,50,65,119,127;/保存多边形各点x坐标的数组21:int yCoords=100,140,127,169,201;/保存多边形各点y坐标的数组22:g.drawPolygon(xCoords,yCoords,5);/画自由多边形框23:24:,图7.1是例7-1的运行结果。从例7-1可以看出,要在Java程序图形界面的容器中绘制图形,首先,需要明确希望绘制的图形是什么,是圆、椭圆,还是直线
13、,这由所选定的方法来确定;其次,需要指明所绘制图形或文字的大小和位置,这要通过相对于界面容器的二维像素坐标来决定。Java的屏幕坐标是以像素为单位,容器的左上角被确定为横坐标(x轴)和纵坐标(y轴)的起点,向右和向下延伸坐标值递增。,图 7.1 例7-1的运行结果,绘制图形的方法很多,每种方法一般也有多种灵活的使用方式,这里不再赘述,读者可以查阅程序员手册中的详细规定。除了Graphics类,Java中还定义了其他一些用来表示几何图形的类,对绘制用户自定义成分也很有帮助。例如,利用Point表示一个像素点;利用Dimension类表示宽和高;利用Rectangle类表示一个矩形;利用Polyg
14、on类表示一个多边形;利用Color类表示颜色等,后面的例子中将利用这些系统定义的类绘图。,7.2.2 显示文字从前面的例子中可以知道,Graphics类的方法drawString()可以在屏幕的指定位置显示一个字符串。Java中还有一个类Font,使用它可以获得更加丰富多彩和逼真精确的字体显示效果。一个Font类的对象表示了一种字体显示效果,包括字体类型、字型和字号。下面的语句用于创建一个Font类的对象:Font MyFont=new Font(TimesRoman,Font.BOLD,12);MyFont对应的是12磅TimesRoman类型的黑体字,其中指定字型时需要用到Font类的三
15、个常量:Font.PLAIN,Font.BOLD,Font.ITALIC。,如果希望使用该Font对象,则可以利用Graphics类的setFont()方法:g.setFont(MyFont);如果希望指定控制组件,如按钮或文本框中的字体效果,则可以使用控制组件的方法setFont()。如设btn是一个按钮对象,则语句:btn.setFont(MyFont);将把这个按钮上显示的标签的字体改为12磅的TimesRoman黑体字。另外,与setFont()方法相对的getFont()方法将返回当前Graphics或组件对象使用的字体。,例 7-2 AvailableFonts.java1:imp
16、ort java.applet.*;2:import java.awt.*;3:4:public class AvailableFont extends Applet5:6:GraphicsEnvironment gl=GraphicsEnvironment.getLocalGraphicsEnvironment();7:String FontNames=gl.getAvailableFontFamilyNames();8:9:public void paint(Graphics g)10:,11:Font current,oldFont;12:13:oldFont=g.getFont();1
17、4:for(int i=0;iFontNames.length;i+)15:16:current=new Font(FontNamesi,Font.PLAIN,10);17:g.setFont(current);18:g.drawString(current.getName(),10+i%4*120,20+i/4*15);19:20:g.setFont(oldFont);21:22:,在例7-2中,首先在第6句利用java.awt包的GraphicsEnvironment类的静态方法getLocalGraphicsEnvironment()获得代表Java程序运行的当前平台的图形环境的对象gl
18、,然后在第7句调用gl对象的getAvailableFontFamilyNames()获得当前平台上所有可以使用的字体名字,返回给字符串数组FontNames,该数组的每个元素是一代表字体名的字符串。第13句首先获取并保存当前缺省的字体对象。第14到19句的循环修改当前字体,设置成一可用的字体并输出该字体的名称,每四个字体占用一行;其中第16句使用Font类的构造函数创建新字体对象。最后,第20句把字体恢复成原来的缺省值。例7-2的运行结果如图7.2所示。,图 7.2 例7-2的运行结果,7.2.3 控制颜色Applet中显示的字符串或图形的颜色可以用Color类的对象来控制,每个Color对
19、象代表一种颜色,用户可以直接使用Color类中定义好的颜色常量,也可以通过调配红、绿、蓝三色的比例创建自己的Color对象。Color类中定义有如下的三种构造函数:public Color(int Red,int Green,int Blue);public Color(float Red,float Green,float Blue);public Color(int RGB);,不论使用哪个构造函数创建Color对象,都需要指定新建颜色中R(红)、G(绿)、B(蓝)三色的比例。在第一个构造函数中通过三个整型参数指定R,G,B,每个参数的取值范围在0255之间;第二个构造函数通过三个浮点参数
20、指定R,G,B,每个参数的取值范围在0.01.0之间;第三个构造函数通过一个整型参数指明其RGB三色比例,这个参数的07比特(取值范围为0255)代表红色的比例,815比特代表绿色的比例,1623比特代表蓝色的比例。例如下面的语句创建的是蓝色:Color blueColor=new Color(0,0,255);,调用Graphics对象的setColor()方法可以把当前的缺省颜色修改成新建的颜色,使此后调用该Graphics对象完成的绘制工作,如绘制图形、字符串等,都使用这个新建颜色:g.setColor(blueColor);除了创建自己的颜色,也可以直接使用Color类中定义好的颜色常
21、量,如:g.setColor(Color.cyan);Color类中共定义了13种静态颜色常量,包括black,orange,pink,grey等,使用时只需以Color为前缀,非常方便。,对于GUI的控制组件,它们有四个与颜色有关的方法分别用来设置和获取组件的背景色和前景色:public void setBackground(Color c)public Color getBackground()public void setForeground()public Color getForeground()例 7-3 UseColor.java1:import java.applet.Appl
22、et;2:import java.awt.*;3:4:public class UseColor extends Applet5:,6:Color oldColor;7:String ParamName=red,green,blue;/三个HTML参数的名称8:int RGBarray=new int3;/保存三色比例的数组9:10:public void init()11:12:for(int i=0;iParamName.length;i+)/取得HTML文件指定的三色13:RGBarrayi=Integer.parseInt(getParameter(ParamNamei);14:15:
23、public void paint(Graphics g),16:17:oldColor=g.getColor();/保存原有的缺省颜色18:g.setColor(new Color(RGBarray0,RGBarray1,RGBarray2);/置新颜色19:g.drawString(How do you think about Current color:20:+g.getColor().toString(),10,20);/用新建颜色显示该颜色的三色分量21:g.setColor(oldColor);/恢复原有颜色22:g.drawString(Back to old default c
24、olor:+g.getColor().toString(),10,40);23:24:,例7-3的运行结果如图7.3所示。例7-3利用HTML文件传递给Java Applet的三个参数作为R,G,B三色的比例。第18句用该比例创建颜色,并用新颜色显示字符串(包括新颜色中三色的比例含量)。第21句再恢复原来的缺省颜色。,图 7.3 例7-3的运行结果,此程序对应的HTML文件如下:UseColor 通过改变三个参数的数值(应在0255之间),就可以指定不同的颜色而不需要重新编译Java Applet程序。,7.2.4 显示图像由于图像的数据量要远远大于图形,所以一般不在程序中自行绘制图像,而是把
25、已经存在于本机硬盘或网络某地的二进制图像文件直接调入内存。图像文件有多种格式,如bmp文件、gif文件、tiff文件等等,其中gif是Internet上常用的图像文件格式。Java中可以利用Graphics类的drawImage()方法显示图像,现考察下面的例子。例 7-4 DrawMyImage.java,1:import java.awt.*;2:import java.applet.Applet;3:public class DrawMyImage extends Applet4:5:Image myImage;6:public void init()7:8:myImage=getIma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 语言 学习 后续
链接地址:https://www.31ppt.com/p-6510184.html