《Transparancy 8Java语言概述(benet).ppt》由会员分享,可在线阅读,更多相关《Transparancy 8Java语言概述(benet).ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Version 3.0图形编程图形编程第八章第八章回顾回顾Java最新的事件处理方法是基于授权事最新的事件处理方法是基于授权事件模型。件模型。事件是描述事件源状态变化的对象。用事件是描述事件源状态变化的对象。用户与户与GUI组件交互就会生成事件。组件交互就会生成事件。事件源是一个生成事件的对象。当这个事件源是一个生成事件的对象。当这个对象的内部状态改变时,事件就会发生。对象的内部状态改变时,事件就会发生。在发生事件时,事件源将调用监听器定在发生事件时,事件源将调用监听器定义的相应方法。义的相应方法。2 2目标目标解释图形的绘制解释图形的绘制描述描述 Graphics 对象对象了解了解 Font
2、 类类了解了解 FontMetrics 类类了解了解 Color 类类掌握绘制各种图形的方法掌握绘制各种图形的方法 3 3所有的图形被画到相关联的窗口中。所有的图形被画到相关联的窗口中。完全可以直接在框架(完全可以直接在框架(Frame)中绘入文中绘入文本信息,甚至可以直接在框架中绘图。本信息,甚至可以直接在框架中绘图。框架经常被设计为一个组件容器。一般首框架经常被设计为一个组件容器。一般首先在一个面板中进行绘制,然后再将这个先在一个面板中进行绘制,然后再将这个面板添加到框架面板添加到框架。在框架中显示信息在框架中显示信息 4 4paintComponent 方法方法JPanel 非常适合于绘
3、制自定义图形非常适合于绘制自定义图形其图形对象是作为其图形对象是作为 paintComponent()方法的方法的参数获得的。参数获得的。要创建自定义图形,需要编写扩展要创建自定义图形,需要编写扩展 JPanel 类的新类。并覆盖父类的类的新类。并覆盖父类的paintComponent()方法:方法:publicvoidpaintComponent(Graphicsg)./将在这里通过参数将在这里通过参数g g完成绘制代码完成绘制代码5 5Graphics对象对象paintComponent方法包含一个方法包含一个Graphics类型类型的参数。的参数。Graphics对象记录针对绘制图形和文
4、本的一对象记录针对绘制图形和文本的一系列设置,系列设置,比如设置的图标或当前颜色、比如设置的图标或当前颜色、字体等。字体等。Java中,所有绘制都必须通过一个图形对中,所有绘制都必须通过一个图形对象。象。6 6Graphics对象的局限性对象的局限性可以用可以用Graphics对象绘制的图形是原始图对象绘制的图形是原始图形。形。对于这些图形,不能使用实数坐标对于这些图形,不能使用实数坐标不能绘制虚线或宽度不定的线条不能绘制虚线或宽度不定的线条不能使用纹理或渐变颜色填充形体不能使用纹理或渐变颜色填充形体7 7Graphics2D对象对象Java2D 包括一个包括一个 Graphics2D 类,此
5、类扩展类,此类扩展了了 Graphics 类,所有图形方法都可以配合类,所有图形方法都可以配合 Graphics2D 对象使用对象使用Java 2D 图形的重要功能:图形的重要功能:颜色和图案:图形可以用渐变颜色和填充图案着色。颜色和图案:图形可以用渐变颜色和填充图案着色。透明绘制:图形的不透明度通过透明绘制:图形的不透明度通过 透明值控制。透明值控制。本地字体:平台上的所有本地字体都可用于绘制文本。本地字体:平台上的所有本地字体都可用于绘制文本。画笔的显式控制:可以使用线条的粗细、虚线图案以及画笔的显式控制:可以使用线条的粗细、虚线图案以及段连接样式。段连接样式。坐标系的转换:可以使用平移、
6、缩放、旋转和剪切坐标系的转换:可以使用平移、缩放、旋转和剪切 为为了了解解决决图图形形对对象象的的局局限限性性,在在Java1.1以以后后的版本中引入了的版本中引入了Java 2D。8 8基本的绘图方法基本的绘图方法 publicvoidpaint(Graphicsg)g.setColor(someColor);/设置颜色设置颜色g.setFont(someLimitedFont);/设置字体设置字体g.drawString(.);/绘制字符串绘制字符串g.drawLine(.);/画线画线g.drawRect(.);/绘制图形轮廓绘制图形轮廓 g.fillRect(.);/绘制填充图形绘制填
7、充图形 g.drawPolygon(.);/绘制图形轮廓绘制图形轮廓 g.fillPolygon(.);/绘制图形轮廓绘制图形轮廓 .每个每个 AWT 组件定义一种传递组件定义一种传递 Graphics 对象的对象的 paint方法,绘制便是在该对象上执行。方法,绘制便是在该对象上执行。设置设置画画笔参笔参数数9 9Java 2D 中的基本绘图方法中的基本绘图方法publicvoidpaintComponent(Graphicsg)super.paintComponent(g);Graphics2Dg2d=(Graphics2D)g;/强制转换为强制转换为Graphics2Dg2d.setPa
8、int(fillColorOrPattern);g2d.setStroke(penThicknessOrPattern);g2d.setComposite(someAlphaComposite);g2d.setFont(anyFont);g2d.setColor(anyColor);g2d.translate(.);g2d.rotate(.);g2d.scale(.);g2d.shear(.);g2d.setTransform(someAffineTransform);SomeShapes=newSomeShape(.);g2d.draw(s);/绘制图形轮廓绘制图形轮廓g2d.fill(s)
9、;/绘制填充图形绘制填充图形设置设置画画笔参笔参数数1010Font 类类Font 类只有一个构造函数类只有一个构造函数:publicFont(Stringname,intstyle,intpointsize)参数参数name表示字体的名称。表示字体的名称。参数参数style表示样式可以是表示样式可以是Font.PLAIN、Font.BOLD或或Font.ITALIC参数参数pointsize表示字体的点数,即以磅为单位表示字体的点数,即以磅为单位的字体大小,可以是的字体大小,可以是 11、12、14、16 等等。publicvoidpaint(Graphicsg).g.setFont(new
10、Font(Helvetica,Font.ITALIC,18);g.drawString(Drawwhereeveryouwant,100,10);.1111通过使用通过使用 getFontMetrics()方法,而不是方法,而不是new运算符(因为它是一个抽象类),可以创建运算符(因为它是一个抽象类),可以创建该类的对象。该类的对象。这个对象包含与字体相关的大量信息,包括这个对象包含与字体相关的大量信息,包括字符的高度、按像素数计算的字符串宽度等。字符的高度、按像素数计算的字符串宽度等。常用方法如下:常用方法如下:intstringWidth(Strings):返回返回字符串宽度字符串宽度in
11、tcharWidth(charc):返回字符返回字符c c的宽度的宽度intgetHeight():返回字体的高度返回字体的高度FontMetrics 类类有有时时,需需要要测测量量用用特特殊殊字字体体显显示示的的一一个个字字符符串串,可以使用可以使用FontMetrics 类类1212使用字体示例使用字体示例1importjava.awt.*;importjavax.swing.*;classFontsPanelextendsJPanelpublicvoidpaintComponent(Graphicsg)Stringquote=Happinessisanattitude.;Fontf=ne
12、wFont(Georgia,Font.ITALIC,16);g.setFont(f);g.drawString(quote,20,20);该包中包含该包中包含JPanel和和JFrame组件组件创建一种新字创建一种新字体,并将该字体,并将该字体设置为当前体设置为当前字体字体publicclassFontsDemoextendsJFramepublicFontsDemo()setTitle(test);setSize(300,200);ContainercontentPane=getContentPane();contentPane.add(newFontsPanel();publicstati
13、cvoidmain(Stringargs)FontsDemoframe=newFontsDemo();frame.show();1313使用字体示例使用字体示例2importjava.awt.*;importjavax.swing.*;classFonts2PanelextendsJPanelpublicvoidpaintComponent(Graphicsg)Stringmyquote=Happinessisanattitude.;Fontf=newFont(TimesNewRoman,Font.BOLD+Font.ITALIC,24);g.setFont(f);FontMetricsfm=
14、getFontMetrics(f);intx=(getSize().width-fm.stringWidth(myquote)/2;inty=getSize().height/2;g.drawString(myquote,x,y);创建一种新字创建一种新字体,并设为当体,并设为当前字体前字体求字符串宽求字符串宽度度1414列出当前平台上所有可用字体列出当前平台上所有可用字体importjava.awt.*;publicclassListFontspublicstaticvoidmain(Stringargs)GraphicsEnvironmentenv=GraphicsEnvironment.
15、getLocalGraphicsEnvironment();StringfontNames=env.getAvailableFontFamilyNames();System.out.println(可用字体:可用字体:);for(inti=0;ifontNames.length;i+)System.out.println(+fontNamesi);1515颜色颜色java.awt.Color 类提供了类提供了1313个可用作标准颜色个可用作标准颜色的常量:的常量:black(黑色)黑色)green(绿色)绿色)red(红色)红色)blue(蓝色)蓝色)lightGray(浅灰色)浅灰色)whi
16、te(白色)白色)cyan(蓝绿色)蓝绿色)magenta(洋红色)洋红色)yellow(黄色)黄色)darkGray(深灰色)深灰色)orange(橙色)橙色)gray(灰色)灰色)pink(粉红色)粉红色)1616Color类的构造函数类的构造函数Color类的构造函数如下:类的构造函数如下:-Color(intred,intgreen,intblue):使使用用三三个个分分别别代代表表红红、绿绿、蓝蓝的的整整数数来来表表示示它它们们混混合的颜色。这些值必须在合的颜色。这些值必须在0 0到到255255之间。之间。-Color(float red,float green,floatblue
17、):用三个浮点数指定红、绿、蓝的相对混合。用三个浮点数指定红、绿、蓝的相对混合。Colora=newColor(0.907F,2F,0F);Colorb=newColor(255,255,0);1717如如果果要要修修改改或或设设置置组组件件的的颜颜色色,可可以以使使用用下列几种方法:下列几种方法:voidsetColor(ColornewColor):设置当设置当前绘制的颜色前绘制的颜色voidsetForeground(Color):设置前景色设置前景色voidsetBackground(Color):设置背景色设置背景色 设置颜色方法设置颜色方法1818使用颜色示例使用颜色示例impor
18、tjava.awt.*;importjavax.swing.*;classColorsPanelextendsJPanelpublicvoidpaintComponent(Graphicsg)Fontf=newFont(Georgia,Font.ITALIC,16);g.setFont(f);g.setColor(Color.red);g.drawString(Hello,75,100);g.setColor(newColor(0,128,128);g.drawString(World,75,125);1919绘制图形绘制图形 2-1使用使用 AWT 时,通常通过调用时,通常通过调用 Grap
19、hics 对象对象的的 drawXxx 或或 fillXxx 方法来绘制图形。方法来绘制图形。通过通过drawXxx方法绘制方法绘制图形边框,通过图形边框,通过fillXxx 方法绘制方法绘制填充图形。填充图形。这些对象用当前选择的颜色来绘制和填充,这些对象用当前选择的颜色来绘制和填充,黑色是默认的颜色。黑色是默认的颜色。2020绘制图形绘制图形 2-2在在 Java 2D 中,通常先创建中,通常先创建 Shape 对象,然对象,然后调用后调用 Graphics2D 对象的对象的 draw 或或 fill 方法。方法。Java 2D 库以面向对象的方式组合几何形体。库以面向对象的方式组合几何形
20、体。java.awt.geom包中囊括了一些有用的包中囊括了一些有用的Shape实实现。如现。如:Line2DRectangle2DEllipse2D2121使用线条绘制图形使用线条绘制图形java.awt.Graphics中提供了一些方法用来绘中提供了一些方法用来绘制图形对象中的直线和多边形。方法如下:制图形对象中的直线和多边形。方法如下:void drawLine(int startX,int startY,int entX,int endY):绘制一绘制一条直线条直线 void drawPolygon(int x,int y,int numpoints):绘制多边形绘制多边形轮廓轮廓 v
21、oid fillPolygon(int x,int y,int numpoints):绘制填充多边形绘制填充多边形 void drawPolyline(int x,int y,int numpoints):绘制顺序连线,绘制顺序连线,如果第一个点和最后一个点不同,该图形不封闭如果第一个点和最后一个点不同,该图形不封闭2222绘制矩形和椭圆绘制矩形和椭圆 void drawRect(int top,int left,int width,int height):绘制矩形边框绘制矩形边框void fillRect(int top,int left,int width,int height):绘制填充
22、矩形绘制填充矩形void drawOval(int top,int left,int width,int height):绘制椭圆边框绘制椭圆边框void fillOval(int top,int left,int width,int height):绘制填充椭圆绘制填充椭圆2323绘图示例绘图示例classShapesPanelextendsJPanelpublicvoidpaintComponent(Graphicsg)super.paintComponent(g);g.drawLine(0,0,100,100);/画线画线g.drawRect(10,10,60,30);/绘制矩形绘制矩形
23、g.drawRoundRect(90,80,80,80,20,20);/绘制圆角矩形绘制圆角矩形intxpoints=20,50,60,30,10;intypoints=50,50,70,90,70;g.drawPolygon(xpoints,ypoints,5);/绘制多边形绘制多边形g.setColor(Color.red);/设置颜色设置颜色g.fillRect(90,10,80,30);/绘制填充矩形绘制填充矩形g.fillRoundRect(180,50,100,80,15,15);/绘制填充圆角矩形绘制填充圆角矩形g.fillOval(10,100,80,30);/绘制填充椭圆绘制
24、填充椭圆 2424绘图模式绘图模式XOR 模式的优点是,无论用什么颜色绘制对模式的优点是,无论用什么颜色绘制对象,始终能够保证新对象是可见的。象,始终能够保证新对象是可见的。语法如下所示:语法如下所示:void setXORMode(Color xorColor)其中,其中,xorColor 指定了绘制对象时与窗口进指定了绘制对象时与窗口进行异或操作的颜色。行异或操作的颜色。要返回至覆盖模式,请调用要返回至覆盖模式,请调用 setPaintMode():void setPaintMode()绘绘图图模模式式决决定定了了对对象象是是如如何何被被画画在在窗窗口口中中的的。默默认认情情况况下下,对对
25、一一个个窗窗口口的的新新的的输输出出将将覆覆盖盖该该窗窗口口中中的的任任何已经存在的内容。何已经存在的内容。2525importjava.awt.*;importjavax.swing.*;classXORPanelextendsJPanelpublicvoidpaintComponent(Graphicsg)super.paintComponent(g);g.setColor(Color.red);g.fillRect(10,10,80,30);g.setColor(Color.green);g.fillRect(50,20,80,30);g.setXORMode(Color.blue);/
26、设置为设置为XOR绘图模式绘图模式g.fillOval(90,30,80,30);设置绘图模式示例设置绘图模式示例2626Toolkit 对象对象要获得要获得 Toolkit 对象,可以使用对象,可以使用 Toolkit 类的类的静态静态 getDefaultToolkit 方法。方法。Toolkit getDefaultToolkit():返回缺省工具包返回缺省工具包。Image getImage(String filename):返回一个将从文件返回一个将从文件中读取其像素数据的图像。参数中读取其像素数据的图像。参数filename 包含图像包含图像文件(例如,文件(例如,GIF 或或 J
27、PEG 文件)文件)boolean drawImage(Image img,int x,int y,ImageObserver ob):绘制比例图像。绘制比例图像。2727显示图像文件的实例显示图像文件的实例以下提供了从当前目录获取本地图像文件的以下提供了从当前目录获取本地图像文件的代码(如果图像文件不在当前目录中,必须代码(如果图像文件不在当前目录中,必须提供完整的路径名):提供完整的路径名):String name=xyz.gif;Image img=Toolkit.getDefaultToolkit().getImage(name);要从网络中获得图像文件,必须提供要从网络中获得图像文件
28、,必须提供 URL,例如:例如:URL u=new URL(http:/ img=Toolkit.getDefaultToolkit().getImage(u);2828总结总结 2-1Graphics 类用于在屏幕上绘制诸如文本、线类用于在屏幕上绘制诸如文本、线条、矩形和椭圆的对象。条、矩形和椭圆的对象。Font 类用于使类用于使 Java 程序输出结果中的文本程序输出结果中的文本显得更生动。显得更生动。FontMetrics 类用于获得关于字体的信息。类用于获得关于字体的信息。2929总结总结 2-2Color 类用于向应用程序或小应用程序组件类用于向应用程序或小应用程序组件添加颜色。添加颜色。绘图模式决定了对象如何被画在窗口中。绘图模式决定了对象如何被画在窗口中。可以可以使用使用 Toolkit 对象将图形文件读入应用对象将图形文件读入应用程序。程序。3030