文字与图形GUI设计.ppt

上传人:M****1 文档编号:577052524 上传时间:2024-08-21 格式:PPT 页数:100 大小:1.36MB
返回 下载 相关 举报
文字与图形GUI设计.ppt_第1页
第1页 / 共100页
文字与图形GUI设计.ppt_第2页
第2页 / 共100页
文字与图形GUI设计.ppt_第3页
第3页 / 共100页
文字与图形GUI设计.ppt_第4页
第4页 / 共100页
文字与图形GUI设计.ppt_第5页
第5页 / 共100页
点击查看更多>>
资源描述

《文字与图形GUI设计.ppt》由会员分享,可在线阅读,更多相关《文字与图形GUI设计.ppt(100页珍藏版)》请在金锄头文库上搜索。

1、第9章 文字与图形GUI设计第9章 文字与图形GUI设计9.1 GUI设计概述设计概述9.2 绘制文字绘制文字9.3 Color类类9.4 绘制形状图形绘制形状图形习题9 第9章 文字与图形GUI设计9.1 GUI设计概述设计概述图形用户界面(GraphicsUserInterface,简称GUI)就是为应用程序提供一个图形化的界面。GUI使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令、启动操作,并将系统运行的结果同样以图形的方式显示给用户,使一个应用程序具有画面生动、操作简便的效果,省去了字符界面中用户必须记忆各种命令的麻烦,深受广大用户的喜爱和欢迎

2、,已经成为目前几乎所有应用软件的既成标准。第9章 文字与图形GUI设计为了方便编程人员开发图形用户界面,Java提供了抽象窗口工具包(AbstractWindowingToolKit,缩写为AWT)和Swing包这两个图形用户界面工具包。在这两个工具包中提供了丰富的类库来支持编程人员创建与平台无关的用户界面。编程人员可方便地使用这些类库来生成各种标准图形界面元素并处理图形界面的各种事件。第9章 文字与图形GUI设计9.1.1 图形用户界面元素分类图形用户界面元素分类 1容器容器容器是用来组织或容纳其他界面成分和元素的组件。一个容器可以包含许多组件,同时它本身也可以作为一个组件,放进另一容器中。

3、一般来说,一个应用程序的图形用户界面首先对应于一个复杂的容器,例如一个窗口。这个容器内部将包含许多界面成分和元素,其中某些界面元素本身也可能又是一个容器,这个容器再进一步包含它的界面成分和元素,依此类推就构成一个复杂的图形界面系统。容器是Java中的类,例如框架(JFrame)、面版(JPanel)及滚动面板(JScrollPanel)等类。容器的引入有利于分解图形用户界面的复杂性。当界面的功能较多时,使用层层相套的容器是非常必要的。第9章 文字与图形GUI设计 2控制组件控制组件与容器不同,控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分。控制组件的作用是完成与用户的一次交互,

4、包括接收用户的一个命令(如菜单命令),接收用户输入的一个文本或选择,向用户显示一段文本或一个图形等等。从某种程度上来说,控制组件是图形用户界面标准化的结果,目前常用的控制组件有选择类的单选按钮、复选按钮、下拉列表,有文字处理类的文本框、文本区域,有命令类的按钮、菜单等。使用控制组件,通常需要如下的步骤:第9章 文字与图形GUI设计(1)创建某控制组件类的对象,指定其大小等属性。(2)使用某种布局策略,将该控制组件对象加入到某个容器中的指定位置处。(3)将该组件对象注册给所能产生的事件对应的事件监听程序,重载事件处理方法,实现利用该组件对象与用户交互的功能。第9章 文字与图形GUI设计 3用户自

5、定义成分用户自定义成分除了上述的标准图形界面元素外,编程人员还可以根据用户的需要,使用各种字型、字体和色彩设计一些几何图形、标志图案等,它们被称为用户自定义成分。用户自定义成分通常只能起到装饰、美化的作用,而不能响应用户的动作,也不具有交互功能。由于用户自定义成分易于学习和掌握,同时,各种基本图形和说明性文字又是容器和控制组件的基本成分,而且考虑到由浅入深的学习规律,因此我们先在本章利用AWT包学习用户自定义成分,在第9章和第10章再学习控制组件和复杂的容器。第9章 文字与图形GUI设计9.1.2 Applet的执行程序的执行程序Applet是一种执行于Web浏览器的小程序,是通过应用程序架构

6、开发而得到的。在我们编写Web浏览器程序时,我们必须继承classApplet或classJApplet,必须覆盖必要的Applet的成员方法,这些成员方法控制了Web页面上的applet的生成与执行。为此,有必要先介绍Applet应用程序的执行过程及其所引用的方法。我们编写的每个Applet小程序都是Applet类的子类,在实际运行中,浏览器在下载字节码的同时,会自动创建一个用户Applet子类的对象,并在适当事件发生时自动调用该对象的几个主要方法。下面说明这些方法及其引用过程。第9章 文字与图形GUI设计(1)init()方法。当Applet程序启动时自动调用init()方法。init()

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

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

9、计9.1.3 JApplet类类在Java的早期版本中,窗体、按钮等组件被列入java.awt包中。随着Java系统的不断改进和功能的增强,在1998年推出JDK1.2版本时,javax.Swing包被列入Java2的基础类库JFC(JavaFundationClasses)中。Swing扩展了AWT组件集,定义了相对于java.awt包的具有更多、更强功能的SwingGUI组件集。javax.Swing.JApplet是java.applet.Applet的子类,且具有如下继承关系:第9章 文字与图形GUI设计java.lang.Objectjava.awt.Componentjava.aw

10、t.Containerjava.awt.Paneljava.applet.Appletjavax.swing.JApplet第9章 文字与图形GUI设计9.1.4 Java 2D APIJava2DAPI是Java用于开发二维图形的API。在Java的AWT和Swing类库中,提供了一些简单的二维图形处理功能。而Java2DAPI则提供了强大灵活且独立于图形设备的二维图形处理功能,它是JFC的一个组成部分,它提供了处理二维图形、图像、文字等对象的统一机制和统一的图形转换机制。J2SDK提供的Java2DAPI中的核心类和接口有:java.awt、java.awt.geom、java.awt.f

11、ont、java.awt.color、java.awt.image、java.awt.image.renderable及java.awt.print。第9章 文字与图形GUI设计Java2DAPI在java.awt包中用于处理二维图形的类和接口有:AlphaComposite、BasicStroke、Color、Composite、CompositeCotext、Font、FontMetrics、GradientPaint、Graphics2D、GraphicsConfiguration、GraphicsEnvironment、Paint、PaintContext、Point、Polygon、

12、Rectangle、Shape、Stroke、TexturePaint及Transparency等。第9章 文字与图形GUI设计Java2DAPI在java.awt.geom包中用于定义几何形状的类和接口有:Arc2D、Arc2D.Double、Arc2D.Float、Area、BasicTextUI.BasicCaret、CubicCurve2D、CubicCurve2D.Double、CubicCurve2D.Float、DefaultCaret、Ellipse2D、Ellipse2D.Double、Ellipse2D.Float、GeneralPath、Line2D、Line2D.Dou

13、ble、Line2D.Float、Polygon、QuadCurve2D、QuadCurve2D.Double、QuadCurve2D.Float、Rectangle、Rectangle2D、Rectangle2D.Double、Rectangle2D.Float、RectangularShape、RoundRectangle2D、RoundRectangle2D.Double及RoundRectangle2D.Float。Java2DAPI在其他一些包,如java.awt.font、java.awt.color、java.awt.image、java.awt.image.renderable

14、及java.awt.print中的类和接口请查阅Java2DAPI帮助文档。第9章 文字与图形GUI设计9.1.5 与图形文字有关的类及其继承关系与图形文字有关的类及其继承关系图9.1给出了java.awt包层次的一部分有关文字、颜色和基本图形的类。图中的每一个类都是从类Object直接派生出来的。其中,类Font是用于操作字体的;类Color是用于操作颜色的;类BasicStroke用于创建图形形状轮廓;类Graphics用于绘制各种串、线、矩形、圆和其他几何图形;类Graphics2D则提供了绘制任意几何形状图形的功能。第9章 文字与图形GUI设计图9.1java.awt包中常用的图形文字

15、类(是由Object类派生的)第9章 文字与图形GUI设计9.1.6 Java 2D API坐标系统坐标系统应用Java2DAPI绘制文本与图形时有两种坐标系,一种是与设备无关的逻辑坐标系,也称为用户坐标系;另一种是与设备(例如显示器、打印机等)有关的坐标系。Java2DAPI具有自动转换两种坐标系的功能。在默认情况下,用户坐标系的原点在绘图表面的左上角,左上角坐标为(0,0),x坐标从左向右递增,y坐标从上向下递增。当文本与图形在屏幕上输出时,坐标单位以像素来度量。我们给出的所有文本与图形都是相对于用户坐标系的。图9.2中的点p表示在用户坐标系中的位置。第9章 文字与图形GUI设计图9.2J

16、ava用户坐标系统第9章 文字与图形GUI设计9.1.7 三种图形对象三种图形对象Graphics2D对象可以输出以下三种图形对象:(1)形状(shape)图形对象。它是一些几何图形类型,如矩形、椭圆、直线和曲线,每种形状对象实现Java.awt.Shape接口。(2)文本(text)图形对象。它可以按不同的字体、风格和颜色输出。(3)图像(image)图形对象。它是java.awt.image.BufferedImage类的对象。由于图像(image)的内容非常多,因此本章只讲述基础性形状和文本两类图形对象的绘制,偶尔也会用到一些图像的知识。第9章 文字与图形GUI设计9.1.8 Graph

17、ics2D对象的属性设置对象的属性设置Graphics2D对象通过其属性来封装绘图用的状态信息。因此,在绘制二维几何图形前,需要对图形对象的属性进行设置。Graphics2D对象提供了下面七个属性的设置和获得方法:(1)Paint属性:用来对要绘制的图形或文字的颜色进行设置。具体设置是通过它的成员方法setPaint()和getPaint()来实现的。例如,假设g2是Graphics2D对象,可以用g2.setPaint(Color.green)语句设置g2的paint属性为绿色。(2)Stroke属性:通过setStroke()方法来控制图形轮廓线的形状。例如,用g2.setStroke(n

18、ewBasicStroke(4)语句设置Graphics2D对象g2的图形轮廓线的宽度为4个像素。第9章 文字与图形GUI设计(3)Front属性:用于设置输出文本的字体。(4)Transformation属性:通过setTransform()方法来实现图形的缩放、旋转和移位等。(5)Compositerule属性:通过setComposite()方法来描述绘图操作如何与存在的背景相复合。(6)Clippingspace属性:通过setClip()方法来设置剪切区域(cliparea),即它将绘图限制在一个设定的区域内,使绘图操作在这个区域外无效。(7)Renderinghints属性:通过s

19、etRenderingHints()方法来控制绘图的质量和速度。第9章 文字与图形GUI设计 9.2 绘绘 制制 文文 字字 9.2.1 绘制文字的成员方法绘制文字的成员方法由于字符串可以用字符串对象、字符数组、字节数组这三种不同形式表示,故Java在Graphics类中相应地提供了三个成员方法来绘制这三种不同形式的字符串(见表9.1)。第9章 文字与图形GUI设计表9.1 绘制字符和字符串的成员方法第9章 文字与图形GUI设计表9.2 绘制字符的常用成员方法第9章 文字与图形GUI设计【示例程序c9_1.java】 使用Graphics类的三个成员方法绘制“WELCOME TO XIAN”。

20、importjava.applet.*;importjava.awt.*;importjavax.swing.*;publicclassc9_1extendsJAppletprivateStrings=WELCOME!;privatecharc=T,O,a,e,t;privatebyteb=d,4,X,I,047,A,N;第9章 文字与图形GUI设计publicvoidpaint(Graphicsg)/覆盖Applet的成员方法g.drawString(s,50,25);g.drawChars(c,0,2,50,50);g.drawBytes(b,2,5,50,75);第9章 文字与图形GUI

21、设计 在这个程序中,为了学习使用绘制字符和字符串的三个成员方法,我们分别定义了一个字符串对象s、一个字符数组c和一个字节数组b,分别用于保存三行文字内容。最后,我们通过覆盖JApplet类的paint()方法,并在这个方法中引用绘制字符和字符串的成员方法实现了文字的绘制。该程序的运行结果见图9.3。第9章 文字与图形GUI设计图9.3程序c9_1的运行结果第9章 文字与图形GUI设计 【示例程序c9_2.java】 使用Graphics2D类的成员方法绘制“WELCOME TO XIAN”。importjava.applet.*;importjava.awt.*;importjavax.swi

22、ng.JApplet;publicclassc9_2extendsJAppletprivateStrings=WELCOME!;privatecharc=T,O,a,e,t;privatebyteb=d,4,X,I,047,A,N;publicvoidpaint(Graphicsg)第9章 文字与图形GUI设计/为保证方法可以访问绘图环境的全部功能,把g强制转换成Graphics2DGraphics2Dg2=(Graphics2D)g;g2.drawString(s,50,25);g2.drawChars(c,0,2,50,50);/Graphics2D是Graphics的子类,可以继承Gra

23、phics类的方法g2.drawBytes(b,2,5,50,75);第9章 文字与图形GUI设计9.2.2 Font类类 1. Font类的构造方法类的构造方法Font类用来描述字体的名称(Name)、大小(Size)和样式(Style)。使用Font类的构造方法创建一个Font类的对象,其格式如下:Font(Stringfontname,intstyle,intsize)其中:fontname为字型名,如宋体、黑体、楷体、Arial、Courier、TimesRoman、Helvetica等;style为字体样式,如粗体(BOLD)、斜体(ITALIC)、正常体(PLAIN);Size为用

24、像素点表示的字体大小。第9章 文字与图形GUI设计2. Font类的成员方法类的成员方法创建一个Font类对象后,就可以使用Font类提供的成员方法来获取字体、字型等方面的信息。Font类提供的常用成员方法如表9.3所示。表表9.3 java.awt.Font类方法类方法 第9章 文字与图形GUI设计3. 设置字体可以用java.awt.Graphics类的成员方法来设置自己希望使用的字体,其格式如下:setFont(FontmyFont);第9章 文字与图形GUI设计4. 自定义字体绘制文字的步骤自定义字体绘制文字的步骤自定义字体绘制文字的步骤如下:(1)创建Font类对象,指定字体名、字体

25、样式及字体大小;(2)使用.setFont()设置创建好的Font类对象;(3)调用drawString()方法绘制文字。第9章 文字与图形GUI设计【示例程序c9_3.java】 使用不同的字体绘制文字。importjava.applet.*;importjava.awt.*;importjavax.swing.JApplet;publicclassc9_3extendsJAppletFontf1=newFont(TimesRoman,Font.BOLD,16);/字体为TimesRoman,字体样式加粗Fontf2=newFont(Courir,Font.ITALIC,24); /字体为C

26、ourir,字体样式倾斜Fontf3=newFont(Helvetica,Font.PLAIN,14);/常规StringhStr=Courir;第9章 文字与图形GUI设计publicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;g2.setFont(f1);g2.drawString(TimesRoman,20,50);g2.setFont(f2);g2.drawString(hStr,20,100);g2.setFont(f3);g2.drawString(Helvetica,20,150);第9章 文字与图形GUI设计图94程序c8_3的

27、运行结果第9章 文字与图形GUI设计【示例程序c9_4.java】获取字体信息。importjava.applet.Applet;importjava.awt.Graphics;importjava.awt.Font;publicclassc8_3extendsAppletFontf=newFont(Courier,Font.ITALIC+Font.BOLD,24);/字体样式倾斜加粗publicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;intstyle,size;第9章 文字与图形GUI设计Strings,name;g2.setFont(f

28、);style=f.getStyle();/得到字体样式if(style=Font.PLAIN)s=Plain;elseif(style=Font.BOLD)s=Bold;elseif(style=Font.ITALIC)s=Italic;elses=Bolditalic;size=f.getSize();/得到字体大小s+=size+point;name=f.getName();/得到字体名称s+=name;g2.drawString(s,10,50);第9章 文字与图形GUI设计图9.5程序c9_4的运行结果第9章 文字与图形GUI设计9.3 Color 类类9.3.1 Color类的构造

29、方法类的构造方法表表9.4 java.awt.Color 类的构造方法类的构造方法第9章 文字与图形GUI设计不论使用哪个构造方法来创建Color对象,都需要指定新建颜色中的R(红)、G(绿)、B(蓝)三色的比例。Java提供的这三个构造方法用不同的方式确定RGB的比例,可以使编程者从256256256(约16000000)种颜色中进行选择。一个RGB值由三部分组成:第一个RGB部分定义红色的量;第二个RGB部分定义绿色的量;第三个RGB部分定义蓝色的量。RGB值中某一部分的值越大,那种特定颜色的量就越大。第9章 文字与图形GUI设计9.3.2 Color类数据成员常量类数据成员常量用户除了可

30、以使用构造方法指定Color的RGB值外,Java还对一些常用的颜色提供了如表9.5所示的Color类数据成员常量。第9章 文字与图形GUI设计表表9.5 Color类类static数据成员常量和数据成员常量和RGB值值第9章 文字与图形GUI设计9.3.3 Color类的成员方法类的成员方法表表9.6 Java.awt.Color类成员方法类成员方法第9章 文字与图形GUI设计此外,还可以用java.awt.Graphics2D类的方法设定颜色或获取颜色。这些方法及其功能如下:setBackground(Colorc):设定背景颜色,c代表颜色。getPaint():获取当前所使用的颜色。s

31、etPaint(newColor(intr,intg,intb):设定前景颜色的另一个方法。setPaint(Colorc):设定前景颜色,c代表颜色。setColor(newColor(intr,intg,intb):设定前景颜色的另一个方法,c代表颜色。第9章 文字与图形GUI设计9.3.4 应用举例应用举例【示例程序c9_5.java】 设置字符颜色。importjava.applet.*;importjava.awt.*;importjavax.swing.JApplet;publicclassc9_5extendsJAppletpublicvoidpaint(Graphicsg)Gr

32、aphics2Dg2=(Graphics2D)g;intred,green,blue;第9章 文字与图形GUI设计red=255;blue=255;green=0;g2.setPaint(newColor(red,green,blue);/设置前景颜色setBackground(Color.cyan);/设置背景颜色g2.drawString(WelcometoXi047an,25,75);showStatus(CurrentRGB:+g2.getPaint().toString();/状态行显示绘图文字颜色信息第9章 文字与图形GUI设计图9.6程序c9_5的运行结果第9章 文字与图形GUI

33、设计 9.4 绘制形状图形绘制形状图形 9.4.1 绘制几何图形的方法与步骤绘制几何图形的方法与步骤java.awt.geom包中定义了许多实现几何图形的类,这些类可以创建几何图形对象,然后通过Graphics2D类的对象可以显示这些几何图形。有两种绘制几何图形的方法:一种是使用draw()方法绘制图形轮廓;另一种是使用fill()方法绘制内部填充的几何图形。第9章 文字与图形GUI设计轮廓几何图形的绘制步骤如下:(1)创建一个Graphics2D类的对象;(2)创建一个几何形状类geom的对象shape;(3)按要求设置Graphics2D的属性;(4)调用Graphics2D类的对象的dr

34、aw(shape)方法绘制几何图形。绘制内部填充的几何图形也可分为4步,其中前3步与轮廓几何图形的绘制步骤相同,只是在第4步中调用的是Graphics2D类的对象的fill(shape)方法。第9章 文字与图形GUI设计9.4.2 绘制线段与矩形绘制线段与矩形线段与矩形是最常用的几何图形之一,Java2DAPI中提供了绘制直线、二次曲线、三次曲线、平面矩形、圆角矩形等图形的构造方法,如表9.7所示。在这些方法中,绘制圆角矩形除了要指定矩形区域外,还需要指明圆角的弧宽(arcw)和弧高(arch)。第9章 文字与图形GUI设计表9.7 绘制线段与矩形用到的构造方法第9章 文字与图形GUI设计第9

35、章 文字与图形GUI设计 【示例程序c9_6.java】 在窗体上绘制直线、二次曲线及三次曲线。importjava.applet.*;importjava.awt.*;importjava.awt.event.*;importjava.awt.geom.*;importjavax.swing.*;classdrawPanelextendsJPanelpublicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;第9章 文字与图形GUI设计Line2D.DoubleLine1=newLine2D.Double(20.0,20.0,80.0,40.0)

36、;QuadCurve2D.DoubleLine2=newQuadCurve2D.Double(130.0,30.0,150.0,50.0,170.0,20.0);CubicCurve2D.DoubleLine3=newCubicCurve2D.Double(220.0,40.0,240.0,60.0,260.0,20.0,300.0,35.0);g2.setPaint(Color.red);/设置前景颜色g2.draw(Line1);g2.draw(Line2);g2.draw(Line3);第9章 文字与图形GUI设计publicclassc9_6publicc9_6()JFrame.set

37、DefaultLookAndFeelDecorated(true);/设置窗体图标显示为默认方式JFramef=newJFrame(drawLine);/创建窗体对象f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/点击窗口关闭图标关闭窗口drawPanelpa=newdrawPanel();/创建容器JPanel类的对象pa.setPreferredSize(newDimension(350,100);/设置JPanel类对象的大小Containercp=f.getContentPane();/创建JFrame的容器对象第9章 文字与图形GU

38、I设计pa.setBackground(Color.cyan);/设置pa对象的背景颜色/cp容器的布局为BorderLayout,添加pa到cp容器中并居中cp.add(pa,BorderLayout.CENTER);f.pack();/调整窗口f.setVisible(true);/设置窗口为可见publicstaticvoidmain(Stringargs)newc9_6();第9章 文字与图形GUI设计图9.7程序c9_6的运行结果第9章 文字与图形GUI设计【示例程序c9_7.java】 绘制各种矩形。importjava.applet.*;importjava.awt.*;impo

39、rtjava.awt.event.*;importjava.awt.geom.*;importjavax.swing.*;publicclassc9_7extendsJAppletpublicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;g2.setPaint(Color.red);/设置前景颜色第9章 文字与图形GUI设计/drawRectangle2D.DoubleRectangle2D.Doublerec=newRectangle2D.Double(20,20,60,30);/创建矩形对象g2.draw(rec);g2.drawString

40、(Rectangle2D,20,70);/drawRoundRectangle2D.Doubleg2.setStroke(newBasicStroke(4);/设置线宽g2.draw(newRoundRectangle2D.Double(100,20,60,30,10,10);/创建圆角矩形对象并画出g2.drawString(RoundRectangle2D,100,70);g2.setPaint(Color.blue);/设置前景颜色/fillRectangle2D.Double第9章 文字与图形GUI设计Rectangle2D.Doublerec1=newRectangle2D.Doub

41、le(20,80,60,30);g2.fill(rec1);g2.drawString(Rectangle2D,20,120);/fillRoundRectangle2D.Doubleg2.setStroke(newBasicStroke(4);/设置线宽RoundRectangle2D.Doublerorec=newRoundRectangle2D.Double(100,80,60,30,10,10);g2.fill(rorec);g2.drawString(RoundRectangle2D,100,120);第9章 文字与图形GUI设计该程序的运行结果如图9.8所示。图9.8程序c9_7的

42、运行结果第9章 文字与图形GUI设计9.4.3 绘制椭圆、圆及弧绘制椭圆、圆及弧在Java2DAPI中,绘制一个椭圆就是使用椭圆类的构造方法来创建一个椭圆对象。椭圆类的构造方法是:Ellipse2D.Float(floatx,floaty,floatw,floath)这个构造方法中有4个参数,分别是椭圆外切矩形的左上角顶点坐标x,y;椭圆的宽度w和高度h(当然也是外切矩形的宽度和高度)。这些参数的数据类型可以是float型或double型。显然,当椭圆的宽度w和高度h相等时,就是一个圆。因此,使用绘制椭圆的构造方法即可绘制圆。第9章 文字与图形GUI设计画弧可看成是画部分椭圆。绘制一个弧的构造

43、方法如下:Arc2D.Float(floatx,floaty,floatw,floath,floatstart,floatextent,inttype)这个构造方法中有7个参数,其中:前4个参数x、y、w、h的含义与椭圆中参数的意义相同,另外3个参数中的start为起始角度,extent为弧角度,type为弧的连接类型。弧角度extent用度数来衡量,表明一段弧在两个角度之间绘制,即表示从起始角度转多少角度画弧,extent为正,表示逆时针画弧,extent为负,表示顺时针画弧。弧的连接类型有OPEN、CHORD、PIE三种,OPEN表示弧两端点无连接(弧),CHORD表示弧的两端点用直线连接

44、(弦),PIE表示弧两端连接成扇形。第9章 文字与图形GUI设计表9.8 创建椭圆及弧类对象的构造方法第9章 文字与图形GUI设计下面我们通过一些实例来说明怎样来绘制这些图形。【示例程序c9_8.java】 绘制椭圆、圆及扇形。importjava.applet.*;importjava.awt.*;importjava.awt.geom.*;importjavax.swing.*;publicclassc9_8extendsJappletpublicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;g2.setPaint(Color.red);/设

45、置前景颜色g2.setStroke(newBasicStroke(2);/设置线宽/绘制弧第9章 文字与图形GUI设计g2.draw(newArc2D.Double(15,15,80,80,60,125,Arc2D.OPEN);g2.draw(newArc2D.Double(100,15,80,80,60,125,Arc2D.CHORD);g2.draw(newArc2D.Double(200,15,80,80,60,125,Arc2D.PIE);g2.fill(newArc2D.Double(280,15,80,80,60,125,Arc2D.OPEN);g2.drawString(Arc2

46、D,100,90);/绘制圆及椭圆g2.drawString(Ellipse2D,100,220);g2.setPaint(Color.lightGray);第9章 文字与图形GUI设计Ellipse2D.Doublee1=newEllipse2D.Double(15,120,100,50);Ellipse2D.Doublee2=newEllipse2D.Double(150,120,80,80);g2.fill(e2);g2.setPaint(Color.black);g2.setStroke(newBasicStroke(6);g2.drawString(Ellipse2D,100,220

47、);g2.draw(e1);g2.draw(e2);第9章 文字与图形GUI设计该程序的运行结果如图9.9所示。图9.9程序c9_8的运行结果第9章 文字与图形GUI设计9.4.4 绘制多边形绘制多边形多边形是由一系列首尾相接的直线组成的。在Java2DAPI中绘制多边形的步骤如下:(1)创建多边形的x坐标数组与y坐标数组;(2)创建GeneralPath类的几何图形的路径对象;(3)调用路径对象的成员方法moveTo(),将准备抬笔移动的点(彼此间无连线的点)的坐标添加到路径对象中;第9章 文字与图形GUI设计(4)调用路径对象的成员方法lineTo(),将准备从当前位置画直线的点的坐标添加

48、到路径对象中;(5)若要画封闭多边形,则应调用路径对象的成员方法closePath()来进行这一设置;(6)调用Graphics2D的对象的成员方法draw()或fill()画多边形。第9章 文字与图形GUI设计【示例程序c9_9.java】 绘制多边形。importjava.applet.*;importjava.awt.*;importjava.awt.geom.*;importjavax.swing.*;publicclassc9_9extendsJAppletpublicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;g2.setPaint

49、(Color.red);第9章 文字与图形GUI设计/setBackground(Color.green);intx1=20,40,50,30,20,15,20;/建立第一个多边形的x坐标数据inty1=20,20,30,50,50,30,20;/建立第一个多边形的y坐标数据intx2=90,110,100,80,70,65,60,70;/建立第二个多边形的x坐标数据inty2=90,110,80,100,100,80,60,70;/建立第二个多边形的y坐标数据intx3=190,218,150,230,162;/建立第三个多边形的x坐标数据inty3=20,100,46,46,100;/建立

50、第三个多边形的y坐标数据GeneralPathpolygon=newGeneralPath(0,x1.length+x2.length);/创建几何图形的路径对象polygon.moveTo(x10,y10);/将准备抬笔移动的点的坐标添加到对象polygon中第9章 文字与图形GUI设计for(intindex=1;indexx1.length;index+)/将准备从当前位置画直线的点的坐标添加到对象polygon中polygon.lineTo(x1index,y1index);polygon.moveTo(x20,y20);for(intindex=1;indexx2.length;in

51、dex+)polygon.lineTo(x2index,y2index);polygon.closePath();/设置从笔的当前位置画直线到最后一次抬笔的位置g2.draw(polygon);/画多边形/画五角星GeneralPathpolygon2=newGeneralPath(0,x3.length);第9章 文字与图形GUI设计polygon2.moveTo(x30,y30);for(intindex=1;indexx3.length;index+)polygon2.lineTo(x3index,y3index);g2.fill(polygon2);该程序的运行结果如图9.10所示。第

52、9章 文字与图形GUI设计图9.10程序c9_9的运行结果第9章 文字与图形GUI设计在该程序中给出了创建路径对象的语句,它可以由直线、二次、三次曲线形成几何路径。创建该对象的构造方法是:GeneralPath(intrule,intinitialCapacity)其中:rule为环绕规则,可以是WIND_EVEN_ODD或WIND_NON_ZERO;initialCapacity为坐标点总个数。第9章 文字与图形GUI设计9.4.5 图形重叠时的色彩设置图形重叠时的色彩设置当绘制的图形对象与已有的图形对象重叠时,图形的重叠部分需要确定如何将新画图形对象(Source)的颜色与已有的图形对象(

53、Destination)的颜色相复合。Java2D提供的Composite和CompositeContext两种接口构成了图形对象间颜色复合模式的基础。其中,实现Composite接口的类是AlphaComposite。第9章 文字与图形GUI设计绘 制 重 叠 图 形 对 象 的 一 般 步 骤 是 : 首 先 创 建AlphaComposite类的对象(如本例中的ac),并用类的getInstance()方法来获取一种特定的颜色混合规则和透明度这两个参数;第二步是调用setComposite()方法将由getInstance()方法获得的颜色复合模式指定给特定的图形对象;最后是使用fill

54、()方法来绘制重叠图形。遵循这样几个步骤,可以使重叠图形对象的颜色具有复合效果,制作出多彩的图形。颜色混合规则是通过使用系统提供的下述属性常量:CLEAR、DEST_IN、DEST_OUT、DEST_OVER、SRC、SRC_IN、SRC_OUT和SRC_OVER中的某一个来实现的。这些属性常量的作用(在没有指定透明度的情况下)如图9.11所示。第9章 文字与图形GUI设计图9.11画重叠图形对象的重叠模式第9章 文字与图形GUI设计下面通过一个具体的实例来说明。下面通过一个具体的实例来说明。【示例程序c9_10.java】 绘制复合图形。import java.applet.*;import

55、 java.awt.*;import java.awt.geom.*;import javax.swing.*;public class c9_10 extends JApplet public void paint(Graphics g) Rectangle2D.Double rec1=new Rectangle2D.Double(0,0,100,100), 第9章 文字与图形GUI设计rec2=newRectangle2D.Double(50,0,100,100),rec3=newRectangle2D.Double(125,75,100,100),rec4=newRectangle2D.

56、Double(50,125,100,100),rec5=newRectangle2D.Double(-25,75,100,100);Graphics2Dg2=(Graphics2D)g;g2.setPaint(Color.red);/将用户坐标系的原点(0,0)平移到屏幕坐标系x为100,y为50像素点的位置g2.translate(100,50);/radians=degree*pie/180第9章 文字与图形GUI设计g2.rotate(45*java.lang.Math.PI)/180);/将图形旋转45g2.fill(rec1);/画左上角坐标为(0,0),长与宽为100的填充矩形/创

57、建仿射变换对象,设置几何图形变换为默认方式g2.setTransform(newAffineTransform();/创建一个AlphaCcomposite类的复合对象ac,规则为50%的透明度AlphaCompositeac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f);g2.setComposite(ac);/设定重叠对象的颜色复合方式g2.setPaint(Color.green);g2.fill(rec2);第9章 文字与图形GUI设计g2.setPaint(Color.blue);g2.fill(rec3);g2.s

58、etPaint(Color.yellow);g2.fill(rec4);g2.setPaint(Color.pink);g2.fill(rec5);该程序的运行结果如图9.12所示。第9章 文字与图形GUI设计图9.12程序c9_10的运行结果第9章 文字与图形GUI设计9.4.6 绘制剪切文字图形绘制剪切文字图形Java2DAPI中提供了文字图形的剪切功能,该功能通过在图形环境中设置一个剪切形状,来将所有的绘图操作限制在该剪切形状的内部进行。剪切文字图形的操作步骤如下(1)创建文字字符串对象;(2)用FontRenderContext类创建字体绘制环境对象;(3)用TextLayout类创建

59、文本布局对象;(4)用GeneralPath类创建文本图形的路径对象;(5)对用户坐标系进行平移变换;第9章 文字与图形GUI设计(6)创建图形对象,该对象是通过调用文本布局对象的getOutline()成员方法得到的图形轮廓;(7)用路径对象的append()成员方法,添加图形对象到路径对象中;(8)用Graphics2D类对象的成员方法draw()画文字图形,并用Graphics2D类对象的成员方法clip()剪切文字图形。(9)设置剪切的形状,绘制一组线条。第9章 文字与图形GUI设计【示例程序c9_11.java】 绘制剪切文字图形。importjava.awt.event.*;imp

60、ortjava.awt.font.*;importjava.awt.geom.*;importjavax.swing.*;importjava.awt.*;publicclassc9_11extendsJAppletprivateShapeclipShape;publicvoidpaint(Graphicsg)Graphics2Dg2=(Graphics2D)g;第9章 文字与图形GUI设计clipShape=makeClipShape(g2);g2.draw(clipShape);g2.clip(clipShape);/剪切文字图形finalintNLINES=90;Point2Dp=new

61、Point2D.Double(0,0);for(inti=0;iNLINES;i+)doublex=(2*getWidth()*i)/NLINES;doubley=(2*getHeight()*(NLINES-1-i)/NLINES;Point2Dq=newPoint2D.Double(x,y);/设置剪切的形状,绘制一组线条g2.draw(newLine2D.Double(p,q);第9章 文字与图形GUI设计ShapemakeClipShape(Graphics2Dg2)/创建字体绘制环境对象FontRenderContextcontext=g2.getFontRenderContext(

62、);Fontf=newFont(隶书,Font.PLAIN,80);/创建文本图形的路径对象GeneralPathclipShape=newGeneralPath();/创建文本布局对象TextLayoutlayout=newTextLayout(Hello,f,context);/将用户坐标系的基点移到屏幕坐标系(0,80)处AffineTransformtransform=AffineTransform.getTranslateInstance(0,80);第9章 文字与图形GUI设计/创建图形对象,该对象是文本布局对象的图形轮廓对象Shapeoutline=layout.getOutli

63、ne(transform);/添加指定的图形对象到路径对象中clipShape.append(outline,false);layout=newTextLayout(你好!,f,context);transform=AffineTransform.getTranslateInstance(0,170);outline=layout.getOutline(transform);/设置false,表示在第一个图形画完后,再抬笔画第二个图形clipShape.append(outline,false);returnclipShape;第9章 文字与图形GUI设计该程序在不使用与使用剪切文字图形时的运

64、行结果分别如图9.13(a)、(b)所示。(a)(b)图9.13程序c9_11的运行结果(a是程序中删除g2.clip(clipShape);一句时的情况)第9章 文字与图形GUI设计习习 题题 9 9.1什么是GUI?9.2开发图形用户界面,Java语言提供了什么工具包?9.3在Java语言中与绘图有关的类是什么类?9.4简述Applet的基本工作原理。9.5Applet的什么方法只在开始时执行一次?什么方法在用户每次访问包含Applet的HTML文件时都被调用?Applet的什么方法可以用来在其中绘图?9.6请描述Java坐标系。第9章 文字与图形GUI设计9.7输出自己的名字、班级及学号

65、,要求名字设置为24号黑体,班级及学号设置为16号加粗斜宋体。9.8将9.7题加上不同的前景颜色输出。9.9用绘制线段的方法输出一个红色的“王”字。9.10绘制一个圆角矩形,在矩形里面添加9.7题的内容,并为字体加颜色。9.11编写一个程序,绘制8个同心圆,各圆应相差10个像素点。9.12编写一个程序,绘制一把扇子,并把它拷贝成两个。第9章 文字与图形GUI设计9.13编写一个程序:绘制一座房子、一棵树和一条弯曲的路。要求:弯曲的路由sin函数得出坐标点,房子与树要配上颜色。9.14试绘制一面国旗。9.15Java语言的图形用户界面有哪些用户自定义的成分?第9章 文字与图形GUI设计9.16填

66、空:(1)_方法在两点间绘制一条直线。(2)RGB是_、_和_的缩写。(3)字体的大小用_作为单位度量。(4)图形平移需要_方法来实现。(5)draw方法属于_类。(6)说明字体风格的三个常量是_、_和_。(7)画圆需要_、_和_三个参数。(8)_方法可绘制一系列字符。第9章 文字与图形GUI设计9.17判断下列语句的对错,并说明为什么。(1)创建一个椭圆对象的构造方法有4个参数,头两个参数指明椭圆的中心坐标。(2)在用户坐标系中,x的值从左向右增长。(3)fill()方法是用当前的颜色绘制一个填充图形。(4)Graphics2D类是一个abstract类。(5)Font类是直接从Graphics类继承来的。(6)创建一个弧的对象的构造方法有7个参数,第6个参数使用度来说明角度。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号