您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Java基础教程(第3版)-第12章-图形、图像与音频
2020/6/6第1页注意:开始用功了!2020/6/6第2页《Java基础教程(第3版)》第12章配合例子源代码一起使用Powerpoint制作:耿祥义张跃平图形、图像与音频2020/6/6第3页主要内容2020/6/6第4页概述Component类有一个方法publicvoidpaint(Graphicsg),程序可以在其子类中重写这个方法。当程序运行时,java运行环境会用Graphicd2D(Graphics的一个子类)将参数g实例化,对象g就可以在重写paint方法的组件上内绘制图形、图像等.Graphics2D的“画笔”分别使用draw和fill方法来绘制和填充一个图形。组件都是矩形形状,组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)。2020/6/6第5页12.1绘制基本图形-11.直线使用java.awt.geom包中的Line2D的静态内部类Double创建直线对象:newLine2D.Double(doublex1,doubley1,doublex2,doubley2);2.矩形使用Rectangle2D.Double类创建一个矩形对象:newRectangle2D.Double(doublex,doubley,doublew,doubleh);3.圆角矩形使用RoundRectangle2D.Double类创建一个圆角矩形对象:newRoundRectangle2D.Double(doublex,doubley,doublew,doubleh,doublearcw,doublearch);参数说明见page236.参考图12.12020/6/6第6页12.1绘制基本图形-24.椭圆使用Ellipse2D.Double类创建一个椭圆对象:newEllipse2D.Double(doublex,doubley,doublew,doubleh0);5.绘制圆弧使用Arc2D.Double类创建圆弧对象:newArc2D.Double(doublex,doubley,doublew,doubleh,doublestart,doubleextent,inttype);参数说明见page236.6.绘制文本Graphics2D对象调用drawString(Strings,intx,inty)绘制参数s指定的字符串。2020/6/6第7页12.1绘制基本图形-37.绘制二次曲线和三次曲线◆二次曲线可用二阶多项式y(x)=ax2+bx+c来表示。使用QuadCurve2D.Double类来创建一个二次曲线,例如:QuadCurve2Dcurve=newQuadCurve2D.Double(50,30,10,10,50,100);◆三次曲线可用三阶多项式y(x)=ax3+bx2+cx+d来表示。使用CubicCurve2D.Double类创建三次曲线,例如:CubicCurve2Dcurve=newCubicCurve2D.Double(50,30,10,10,100,100,50,100);更多参数说明见page236.8.绘制多边形使用java.awt包中的Polygon类创建空多边形:Polygonpolygon=newPolygon();然后多边形调用addPoint(intx,inty)方法向多边形添加顶点。例子1绘制了太极图和四边形,效果如图12.2。2020/6/6第8页12.2变换图形(3)把Graphics对象,比如g_2d设置为具有trans这种功能的画笔g_2d.setTransform(trans);假如rect是一个矩形对象,那么g_2d.draw(rect)画的就是旋转后的矩形的样子。例子2旋转椭圆和字符串,效果如图12.3AffineTransform类可以使用来实现图形的平移、缩放或旋转。(1)首先使用AffineTransform类创建一个对象:AffineTransformtrans=newAffineTransform();对象trans具有最常用的三个方法来实现对图形变换操作:◆translate(doublea,doubleb)移动图形◆scale(doublea,doubleb)缩放图形◆rotate(doublenumber,doublex,doubley)旋转图形(2)进行需要的变换trans.rotate(60.0*3.1415927/180,100,100);准备把一个矩形绕点(100,100)顺时针旋转60度。2020/6/6第9页12.3图形的布尔运算两个图形进行布尔运算运算之前,必须分别用这两个图形创建两个Area区域对象,例如:Areaa1=newArea(T1);Areaa2=newArea(T2);a1就是图形T1所围成的区域;a2就是T2所围成的区域。那么,a1调用add方法:a1.add(a2);之后,a1就变成a1和a2经过布尔“或”运算后的图形区域。Area类的常用方法见page239.可以用Graphics2D对象g来绘制或填充一个Area对象(区域):g.draw(a1);和g.fill(a1);例子3绘制图形的布尔运算,效果如图12.4。2020/6/6第10页12.4清除◆clearRect(intx,inty,intwidth,intheight)用背景色填充指定矩形以达到清除该矩形的效果◆组件调用repaint方法时,程序首先清除paint()方法以前所画的内容,然后再调用paint()方法。注意:实际上当我们调用repaint()方法时,程序自动地去调用update(Graphicsg)方法(从父类Component继承下来的),update方法清除paint()方法以前所画的内容,然后再调用paint方法。但有时不想让程序清除paint()方法以前所画的所有内容,那么可以在程序中重写update方法(即隐藏父类的方法),根据需要来清除哪些部分或保留哪些部分。例子4效果如图12.5。2020/6/6第11页12.5绘制图像组件上可以显示图像,首先使用Icon类的子类ImageIcon类创建封装图像文件(如cat.jpg)的IconImage对象:Iconicon=newImageIcon(cat.jpeg);然后让按钮组件(如button)调用方法设置其上的图像:button.setIcon(icon);除了上述方法外,可以使用Grapgics绘制图像,步骤如下:1.加载图像组件调用getToolkit()方法可以返回这个对象的引用。Tollkit类的对象调用方法ImagegetImage(StringfileNme)或ImagegetImage(Filefile)可以返回一个Image对象,该对象封装着参数指定的图像文件。2.绘制图像◆publicbooleandrawImage(Imageimg,intx,inty,ImageObserverobserver);参数img是被绘制的Image对象,x、y是要绘制指定图像的矩形的左上角所处的位置,observer是加载图像时的图像观察器。◆publicbooleandrawImage(Imageimg,intx,inty,intwidth,intheight,ImageObserverobserver)2020/6/6第12页例子5例子5绘制了一幅图像,并更改了窗口左上角的咖啡图像。效果如图12.6。注:JFrame对象可用setIconImage(Imageimage)方法设置窗口左上角的图像,Java窗口的默认图标是一个咖啡杯。2020/6/6第13页12.6播放音频播放音频的步骤如下。(1)创建File对象FilemusicFile=newFile(hello.wav);(2)获取URI对象(URI类属于java.net包)URIuri=musicFile.toURI();(3)获取URL对象URIurl=uri.toURL();(4)创建音频对象(AudioClip和Applet类属于java.applet包)AudioClipclip=Applet.newAudioClip(url);(5)播放,循环与停止clip.play()开始播放,clip.loop()循环播放,clip.stop()停止播放。例子6Example12_6.java,AudioClipDialog.java在应用程序中播放音频,效果如图12.7.2020/6/6第14页12.7小结1.可以使用Graphics类或其子类Grapgics2D类绘制各种基本图形、图像。2.在应用程序中可以播放.au,.aiff,.wav,.midi,.rfm格式的音频。“本节结束咯~偶都会了~太葱明了”可以听到美妙的音乐喽!2020/6/6第15页
本文标题:Java基础教程(第3版)-第12章-图形、图像与音频
链接地址:https://www.777doc.com/doc-5720803 .html