- 1.19 MB
- 2022-08-11 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
第7章图形用户界面的设计与实现7.1图形用户界面概述7.2用户自定义成分7.3Java的事件处理7.4GUI标准组件概述7.5标签、按钮与动作事件7.6文本框、文本区域与文本事件7.7单、复选按钮,列表与选择事件\n7.8滚动条与调整事件7.9画布与鼠标、键盘事件7.10布局设计7.11Panel与容器事件7.12Frame与窗口事件7.13菜单的定义与使用7.14对话框、组件事件与焦点事件7.15小结习题\n本章介绍Java程序中图形用户界面(GUI)的设计与实现。图形用户界面是程序与用户交互的窗口。每个图形界面下的Java程序都必须设计、建立自己的图形用户界面并利用它接受用户的输入,向用户输出程序运行的结果。本章将介绍图形用户界面的基本组成和主要操作,包括绘制图形,显示动画,使用AWT包各组件和实现Java的事件处理功能等。\n7.1图形用户界面概述设计和构造用户界面,是软件开发中的一项重要工作。用户界面是计算机的使用者——用户与计算机系统交互的接口,用户界面功能是否完善,使用是否方便,将直接影响到用户对应用软件的使用。图形用户界面(graphicsuserinterface)简称GUI,使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形的方式显示给用户。图形用户界面操作简便,省去了字符界面用户必须记忆各种命令的麻烦,已经成为目前几乎所有应用软件的既成标准。所以,学习设计和开发图形用户界面,是软件开发人员必修的一课。\n随着图形用户界面的普及和界面元素标准化程度的提高,许多辅助设计和实现图形用户界面的方法和工具也相应出现,例如,可视化编程方法允许设计人员直接绘出图形界面,然后交给专门的工具自动编码生成这个图形界面,免除了开发者的许多编程负担,目前许多应用软件开发工具都具有可视化编程的功能。Java语言中,为了方便图形用户界面的开发,设计了专门的类库来生成各种标准图形界面元素和处理图形界面的各种事件。这个用来生成图形用户界面的类库就是java.awt包。AWT是abstractwindowtoolkit(抽象窗口工具集)的缩写。\n所谓抽象,是因为Java是一种跨平台的语言,要求Java程序能在不同的平台系统上运行,这对于图形用户界面尤其困难。为了达到这个目标,AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行。正如Java虚拟机使得Java程序独立于具体的软硬件平台一样,“抽象窗口”使得开发人员所设计的界面独立于具体的界面实现。也就是说,开发人员用AWT开发出的图形用户界面可以适用于所有的平台系统。当然,这仅是理想情况。实际上AWT的功能还不是很完全,Java程序的图形用户界面在不同的平台上(例如,在不同的浏览器中)可能会出现不同的运行效果,如窗口大小、字体效果将发生变化等。\n首先考察一下图形用户界面的构成。简单地说,图形用户界面就是一组图形界面成分和界面元素的有机组合,这些成分和元素之间不但外观上有着包含、相邻、相交等物理关系,内在的也有包含、调用等逻辑关系,它们互相作用、传递消息,共同组成一个能响应特定事件、具有一定功能的图形界面系统。\n设计和实现图形用户界面的工作主要有两个:①创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要排列它们,从而构成完整的图形用户界面的物理外观。②定义图形用户界面的事件和各界面元素对不同事件的响应,从而实现图形用户界面与用户的交互功能。Java中构成图形用户界面的各种元素和成分可以粗略地被分为三类:容器、控制组件和用户自定义成分。\n1.容器容器是用来组织其他界面成分和元素的单元。一般说来一个应用程序的图形用户界面首先对应于一个复杂的容器,如一个窗口。这个容器内部将包含许多界面成分和元素,这些界面元素本身也可能又是一个容器,这个容器再进一步包含它的界面成分和元素,依此类推就构成一个复杂的图形界面系统。容器的引入有利于分解图形用户界面的复杂性,当界面的功能较多时,使用层层相套的容器是非常有必要的。\n2.控制组件与容器不同,控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控制组件的作用是完成与用户的一次交互,包括接收用户的一个命令(如菜单命令),接收用户的一个文本或选择输入,向用户显示一段文本或一个图形,等等。从某种程度上来说,控制组件是图形用户界面标准化的结果,目前常用的控制组件有选择类的单选按钮、复选按钮、下拉列表;有文字处理类的文本框、文本区域;有命令类的按钮、菜单等。其中文本框、按钮和标签是前面使用过的GUI组件。\n使用控制组件,通常需要如下的步骤:(1)创建某控制组件类的对象,指定其大小等属性。(2)使用某种布局策略,将该控制组件对象加入到某个容器中的某指定位置处。(3)将该组件对象注册给它所能产生的事件对应的事件监听者,重载事件处理方法,实现利用该组件对象与用户交互的功能。严格说来,容器也是一种控制组件,因为一个容器也可以被视为组件而包含在其他容器的内部。\n3.用户自定义成分除了上述的标准图形界面元素,编程人员还可以根据用户的需要设计一些用户自定义的图形界面成分,例如绘制一些几何图形、使用标志图案等。用户自定义成分由于不能像标准界面元素一样被系统识别和承认,所以通常只能起到装饰、美化的作用,而不能响应用户的动作,也不具有交互功能。\n7.2用户自定义成分本节主要介绍如何利用Java类库中的类及其方法来绘制用户自定义的图形界面成分。编程人员可以利用这些方法自由地绘制图形和文字,也可以将已经存在的图形、动画等加载到当前程序中来。绘制图形和文字将要用到前面已经接触过的类Graphics。\nGraphics是java.awt包中一个类,其中包括了很多绘制图形和文字的方法。当一个Applet运行时,执行它的浏览器会自动为它创建一个Graphics类的实例,利用这个实例,就可以在Applet中随意绘制图形和文字。实际上Applet本身就是一个图形界面的容器。而如果希望在图形界面的JavaApplication程序中绘制图形,则需要创建一个Canvas类的对象加入到这个Application程序的图形界面容器中,Canvas对象也拥有一个与Applet类的paint()方法相同的paint()方法,利用系统传递给这个paint()方法的Graphics类参数对象就可以在Application程序的图形用户界面中绘制各种图形和文字。\n7.2.1绘制图形利用Graphics类可绘制的图形有直线、各种矩形、多边形、圆和椭圆等。下面的例子综合了这些方法。例7-1DrawFigures.java1:importjava.awt.*;2:importjava.applet.Applet;3:publicclassDrawFiguresextendsApplet4:{5:publicvoidpaint(Graphicsg)6:{7:g.drawLine(30,5,40,5);//画直线\n8:g.drawRect(40,10,50,20);//画矩形框(左上角x坐标,左上角y坐标,x轴尺寸,y轴尺寸)9:g.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.drawString(″Theyarefigures!″,100,220);\n17:}18:publicvoiddrawMyPolygon(Graphicsg)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:}\n图7.1是例7-1的运行结果。从例7-1可以看出,要在Java程序图形界面的容器中绘制图形,首先,需要明确希望绘制的图形是什么,是圆、椭圆,还是直线,这由所选定的方法来确定;其次,需要指明所绘制图形或文字的大小和位置,这要通过相对于界面容器的二维像素坐标来决定。Java的屏幕坐标是以像素为单位,容器的左上角被确定为横坐标(x轴)和纵坐标(y轴)的起点,向右和向下延伸坐标值递增。\n图7.1例7-1的运行结果\n绘制图形的方法很多,每种方法一般也有多种灵活的使用方式,这里不再赘述,读者可以查阅程序员手册中的详细规定。除了Graphics类,Java中还定义了其他一些用来表示几何图形的类,对绘制用户自定义成分也很有帮助。例如,利用Point表示一个像素点;利用Dimension类表示宽和高;利用Rectangle类表示一个矩形;利用Polygon类表示一个多边形;利用Color类表示颜色等,后面的例子中将利用这些系统定义的类绘图。\n7.2.2显示文字从前面的例子中可以知道,Graphics类的方法drawString()可以在屏幕的指定位置显示一个字符串。Java中还有一个类Font,使用它可以获得更加丰富多彩和逼真精确的字体显示效果。一个Font类的对象表示了一种字体显示效果,包括字体类型、字型和字号。下面的语句用于创建一个Font类的对象:FontMyFont=newFont(″TimesRoman″,Font.BOLD,12);MyFont对应的是12磅TimesRoman类型的黑体字,其中指定字型时需要用到Font类的三个常量:Font.PLAIN,Font.BOLD,Font.ITALIC。\n如果希望使用该Font对象,则可以利用Graphics类的setFont()方法:g.setFont(MyFont);如果希望指定控制组件,如按钮或文本框中的字体效果,则可以使用控制组件的方法setFont()。如设btn是一个按钮对象,则语句:btn.setFont(MyFont);将把这个按钮上显示的标签的字体改为12磅的TimesRoman黑体字。另外,与setFont()方法相对的getFont()方法将返回当前Graphics或组件对象使用的字体。\n例7-2AvailableFonts.java1:importjava.applet.*;2:importjava.awt.*;3:4:publicclassAvailableFontextendsApplet5:{6:GraphicsEnvironmentgl=GraphicsEnvironment.getLocalGraphicsEnvironment();7:StringFontNames[]=gl.getAvailableFontFamilyNames();8:9:publicvoidpaint(Graphicsg)10:{\n11:Fontcurrent,oldFont;12:13:oldFont=g.getFont();14:for(inti=0;iUseColor