欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Java程序设计电子教案第九章.ppt

    • 资源ID:6510013       资源大小:302.99KB        全文页数:60页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java程序设计电子教案第九章.ppt

    第9章 java 多媒体设计,9.1图形处理9.2图像处理9.3 2D图像9.4 动画处理9.5 播放声音,9.1图形处理,Java所有与图形有关的功能都包含在AWT包里。AWT(Abstract Windows Toolkit)是抽象窗口工具包的缩写,支持窗口界面的创建、简单图形的绘制、图形化文本 输出和事件监听。用户可利用AWT提供的类和方法,在窗口上绘制各种各样的图形和 文本,增加界面的美观。基本图形包括点、线、圆、矩形等,是构成复杂图形的基础。绘制基本图形要使用AWT中的Graphics类,它提供了各种基本图形的绘制方法。,下一页,返回,9.1图形处理,911 直线public void drawLine(int x1,int y1,int x2,int y2)参数(x1,y1)和(x2,y2)是所画直线的两个端点坐标。方法的功能是:在点(x1,y1)和(x2,y2)之间画直线。在窗口上随机绘制10条直线。/DrawLines.java import java.applet.*;import java.awt.*;import java.lang.*;public class DrawLines extends Applet public void paint(Graphics g),上一页,下一页,返回,9.1图形处理,int i,x1,y1,x2,y2;for(i=1;i=10;i+)x1=(int)(Math.random()*10);y1=(int)(Math.random()*200);x2=(int)(Math.random()*380);y2=(int)(Math.random()*200);g.drawLine(x1,y1,x2,y2);,上一页,下一页,返回,9.1图形处理,根据题目的要求,我们使用一组随机数来指定直线两个端点的坐标,并采用循环结构实现10次循环。drawLine方法中的4个整型参数代表直线两个端点的坐标。random()是Math类中的一个方法,该方法返回一个double值,值域为(00,10)。Math类是java1ang包的一部分java1ang可由编译器自动引入,所以我们不必把Math类引入到程序中。直接调用random方法得到返回值太小,在实际应用中往往乘以一个整数因子,并强制类型转换 为一个合适的整数。如(int)(Mathrandom()x100)的实际取值范围为0,100。在图形方式下要想准确定位,必须了解屏幕坐标系的构成。Java定义一个窗口工作区的左上角为坐标原点(o,o),以像素点为单位,顺序向右和向下延伸。图形的大小如超过窗口,则超出部分不会显示出来。,上一页,下一页,返回,9.1图形处理,9.1.2设置颜色.创建 Color类的一个对象(1)public Color(int r,int g,int b)整数 r,g,b 分别表示红,绿,蓝的含量(2)public Color(int r,int g,int b,int a);整数a表示alpha值,它们的取值为 0 到 255。(3)public Color(float r,float g,float b)单精度浮点数 r,g,b分别表示红,绿,蓝的含量(4)public Color(float r,float g,float b,float a)单精度浮点数a表示alpha值,它们的取值范围是 0.0f到1.0f,上一页,下一页,返回,9.1图形处理,(5)public Color(int rgb)整型参数rgb指明红(1623bits表示)绿(815bits表示)蓝(07bits表示)三色的取值。(1)使用Graphics类中方法:public void setColor(Color c)设置颜色。(2)使用Color类的以下几个方法获取颜色对象:public Color getColor();返回当前颜色对象。public int getRed();得到颜色对象的red分量。public int getGreen();得到颜色对象的green值。public int getBlue();得到颜色对象的blue值。public int getAlpha();得到颜色对象的alpha值。,上一页,下一页,返回,9.1图形处理,/TestColor.Javaimport java.applet.Applet;import java.awt.Graphics;import java.awt.Font;import java.awt.Color;public class TestColor extends Applet public void paint(Graphics g),上一页,下一页,返回,9.1图形处理,String s=中国北京;Color c1=new Color(255,0,0);Color c2=new Color(255,0,0,128);Color c3=Color.blue;g.setColor(c1);g.drawString(红色:+s,20,20);g.setColor(c2);g.drawString(红色:+s,20,40);g.setColor(c3);g.drawString(蓝色:+s,20,60);,上一页,下一页,返回,9.1图形处理,9.1.3字符数组和字节数组的显示Graphics 类的以下方法显示字符串、字符数组和字节数组:(1)绘制字符串 void drawString(String string,int x,int y)坐标点(x,y)与要绘制的字符串 string左下角相对应。(2)绘制字符数组void drawChars(char chars,int offset,int number,int x,int y)offset 是数组的起始下标,number 是要绘制的元素个数。(3)绘制字节数组void drawBytes(byte bytes,int offset,int number,int x,int y)offset 是数组的起始下标,number 是要绘制的元素个数。,上一页,下一页,返回,9.1图形处理,/DrawCharByte.javaimport java.applet.*;import java.awt.*;public class DrawCharByte extends Applet public void init()setBackground(new Color(0,128,0);public void paint(Graphics g)g.setFont(new Font(华文行楷,Font.BOLD,40);,上一页,下一页,返回,9.1图形处理,String s=中国北京;char ch=new chars.length();s.getChars(0,4,ch,0);g.setColor(Color.red);g.drawChars(ch,2,2,20,40);byte byt=65,66,67,68,69,70,71,72,73,74,75;g.setFont(new Font(Arial,Font.ITALIC,30);g.setColor(Color.red);g.drawBytes(byt,0,5,120,40);g.setColor(Color.white);g.drawBytes(byt,0,5,122,38);,上一页,下一页,返回,9.1图形处理,9.1.4 绘制Rectangle(1)画矩形:public void drawRect(int x,int y,int width,int height);x,y是矩形左上角坐标;width,heigh是矩形的宽度和高度。(2)用当前设置的颜色画填充矩形:public void fillRect(int x,int y,int width,int height);(3)清除指定的矩形区域,该区域颜色将为背景颜色:public void clearRect(int x,int y,int width,int height);,上一页,下一页,返回,9.1图形处理,(4)画圆角矩形:public void drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight);public void fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight);前4个参数的含义同上;arcWidth-水平方向圆弧的总宽度;arcHeight-垂直方向圆弧的总高度。,上一页,下一页,返回,9.1图形处理,/DrawRectangle.javaimport java.applet.*;import java.awt.*;public class DrawRectangle extends Applet public void paint(Graphics g)setBackground(Color.cyan);g.setColor(Color.blue);g.fillRect(20,20,40,40);/为了演示clearRect()方法的效果,先画一个比清除的区域大2个像素的填充矩形。g.fillRect(79,19,42,42);,上一页,下一页,返回,9.1图形处理,g.clearRect(80,20,40,40);g.fillRoundRect(140,20,40,40,40,40);9.1.5 绘制椭圆和弧(1)画椭圆 public void drawOval(int x,int y,int width,int height);public void fillOval(int x,int y,int width,int height);(2)画圆弧 画圆弧就是画部分椭圆的圆弧和填充扇形。,上一页,下一页,返回,9.1图形处理,public void drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)public void fillArc(int x,int y,int width,int height,int startAngle,int arcAngle)startAngle是弧的起始角度;arcAngle 表示从起始角度算起转多少度,逆时针为正。画椭圆的方法drawOval(),fillOval具有相同的参数,前两个参数用来定位,实际指定的是包围椭圆的矩形的左上角位置,后2个参数指定了椭圆的宽度和高度,如果取相同值,则画出的是正圆。drawArc方法可画圆弧,fillArc方法实际画出的是扇形。圆弧是椭圆的一部分,夹 在两个角之间,因此画圆弧的方法比画椭圆的方法多了两个参数:起始角和张角(以角度为单位)。起始角确定了圆弧的起始位置;张角确定了圆弧的大小,取正(负)值为沿逆(顺加寸针方向画出圆弧。当张角取值大于360时,画出的就是椭圆。我们用一个例子来说明这两个方法的使用。,上一页,下一页,返回,9.1图形处理,/DrawOval.javaimport java.applet.*;import java.awt.*;public class DrawOval extends Applet public void paint(Graphics g)g.setColor(Color.blue);g.drawRect(20,20,100,60);g.fillOval(20,20,100,60);g.drawOval(140,20,100,60);g.fillArc(140,20,100,60,0,60);,上一页,下一页,返回,9.1图形处理,9.1.6画多边形将多边形的各个顶点的坐标对应放到整型数组xPoints(x坐标)和整型数组yPoints(y坐标)中,用以下方法画多边形和填充多边形:public void drawPolygon(int xPoints,int yPoints,int points);public void fillPolygon(int xPoints,int yPoints,int points);参数points表示顶点的个数。创建Polygon类的对象p画多边形 Polygon类的构造函数:,上一页,下一页,返回,9.1图形处理,Polygon();Polygon(int xPoints,int yPoints,int points);画多边形 public void drawPolygon(Polygon p);public void fillPolygon(Polygon p);追加顶点坐标的方法:public void addPoint(int x,int y)。/DrawPolygon.javaimport java.applet.*;import java.awt.*;public class DrawPolygon extends Applet,上一页,下一页,返回,9.1图形处理,public void paint(Graphics g)int x=20,40,80,100,80,40;int y=40,20,20,40,60,60;g.setColor(Color.blue);g.fillPolygon(x,y,6);int x1=140,160,200,220,200,160;int y1=40,20,20,40,60,60;Polygon p=new Polygon(x1,y1,6);g.fillPolygon(p);,上一页,下一页,返回,9.1图形处理,多边形的多边是分别用两个整数数组来表示x坐标和y坐标的,并用一个整数表示多边的顶点数,多边形可以说是封闭的,也可以是开放的,取决于最后一条直线终点坐标的取值,若和第一条直线的起点坐标重合画出的多边形为封闭的,否则为开放的。,上一页,返回,9.2 图像处理,/ShowImage.Javaimport java.applet.*;import java.awt.*;public class ShowImage extends Applet public void paint(Graphics g)Image pic=getImage(getDocumentBase(),a.jpg);int w=pic.getWidth(this),h=pic.getHeight(this),d=5;,下一页,返回,9.2 图像处理,g.drawImage(pic,0,0,w,h,this);/按原图宽高显示g.drawImage(pic,w+d,0,w/2,h/2,this);/缩小为原图宽高的一半并显示/截取原图右下角的1/4并显示g.drawImage(pic,w+d,h/2,w+w/2+d,h,w/2,h/2,w,h,this);,上一页,下一页,返回,9.2 图像处理,我们以这个程序为例,总结出在Java程序中显示一幅图像的步骤。图像显示分为两个步骤:首先加载图像(即将图像文件读入内存),然后画出图像。程序创建了一个Image 对象img,通过Applet的getlmage方法加载图像文件ajpg,将它和img联系起来。然 后通过Graphics的drawlmage方法显示图像。加载图像 加载图像一般放在初始化方法init中进行。程序中的getlmage方法可加载Java支持的图像文件,它有两个参数,一个是图像文件地址,一个是图像文件名称。由于Applet 是面向网络的,因此图像文件的存储位置并不局限于本地计算机的磁盘目录,大部分情况是直接读取Web服务器上的图像文件。getlmage方法返回一个Image对象,它的调用格式为:,上一页,下一页,返回,9.2 图像处理,Image getlmage(URL url)Image getlmage(URL url,String name)其中url是一个URL类的对象,J代表一个网络地址,例如下面的语句可以加载sun公司Web服务器指定位置上的一幅图片:getlmage(newURL(http:jaVaskincomgraphicspeoplegif”);上述程序中没有直接给出一个具体网络地址,因为在不熟悉网站的情况下读取图像文件是毫无意义的。另一方面,设计Applet一般是为了显示自己已经准备好的图像,所以程序使用了getCodeBase方法。getCodeBase返回的是Applet文件所在的地址,即该文件所在的目录,我们是把图像文件和Applet文件放在同一个目录下的,这样就能保证程序找到该图像文件。另外,使用getDocumentBase方法也可以达到同样目的。,上一页,下一页,返回,9.2 图像处理,2、显示图像显示图像需要调用Graphics类的方法drawlmage,它可以将Image对象关联的图像 显示在Applet的指定位置。drawlmage方法的调用格式如下:boolean drawlmage(1mage img,int x,int y,ImageObserver observer)boolean drawlmage(1mage img,int x,int y,Color bgcolor,ImageObserver observer)其中img就是要显示的图像,x和y是图像显示位置(x和y可取负值,表示一部分图像被移出了显示区)、bgcolor是图像显示区域的背景色、observer是图像加载跟踪器,通常将该参数指定为this,即由Applet负责跟踪图像的加载情况。这两种方法都是将图像照原样显示,能不能对图像进行缩放呢?使用下面两种调用格式就可以对图像进行缩放显示:boolean drawlmage(1mage img,int x,int y,int width,int height,ImageObserver Observer),上一页,返回,9.3 2D图像,画图类Graphics2D:更强大的图形处理功能。它是Graphics类的子类。Graphics2D g2d=(Graphics2D)g;1创建各种图形对象java.awt.geom包中提供了很多构造图形对象的类。直线:Line2D line=new Line2D.Double(20.0,20.0,320.0,20.0);起点在(20.0,20.0),终点在(320.0,20.0)。长方形:,下一页,返回,9.3 2D图像,Rectangle2D rect=new Rectangle2D.Double(20.0,30.0,90.0,60.0);左上角坐标为(20.0,30.0),宽、高分别为90.0和60.0 椭圆:Ellipse2D ellipse=new Ellipse2D.Double(220.0,30.0,90.0,60.0);2改变绘图时画笔的大小创建BasicStroke类对象,并使用Graphics2D类的方法:setStroke(BasicStroke bstroke)可以改变画笔线条的宽度。,上一页,下一页,返回,9.3 2D图像,例如,下面的语句设置画笔线条的宽度为3像素:BasicStroke bstroke=new BasicStroke(3.0f);g2d.setStroke(bstroke);/Draw2D.javaimport java.applet.*;import java.awt.*;import java.awt.geom.*;public class Draw2D extends Applet public void paint(Graphics g),上一页,下一页,返回,9.3 2D图像,Graphics2D g2d=(Graphics2D)g;/把父类对象强制转化为子类对象BasicStroke bstroke=new BasicStroke(3.0f);/画笔线条的宽度g2d.setStroke(bstroke);Line2D line=new Line2D.Double(20.0,20.0,320.0,20.0);g.setColor(Color.blue);g2d.draw(line);g.setColor(Color.red);Rectangle2D rect=new Rectangle2D.Double(20.0,30.0,90.0,60.0);g2d.draw(rect);RoundRectangle2D r_rect=new,上一页,下一页,返回,9.3 2D图像,RoundRectangle2D.Double(120.0,30.0,90.0,60.0,50.0,25.0);g2d.draw(r_rect);Ellipse2D ellipse=new Ellipse2D.Double(220.0,30.0,90.0,60.0);g2d.draw(ellipse);用渐变颜色画填充图形1.java.awt包中类GradientPaint的构造方法:public GradientPaint(float x1,float y1,Color color1,float x2,float y2,Color color2);,上一页,下一页,返回,9.3 2D图像,可创建渐变颜色。前三个参数指定坐标点(x1,y1)的颜色为color1;后三个参数指定坐标点(x2,y2)的颜色为color2;它们之间的颜色由color1渐变到color2。2.通过Graphics2D类的方法:setPaint(GradientPaint gradColor)设置画图显示的颜色为渐变色。如何创建和设置渐变色,上一页,下一页,返回,9.3 2D图像,/Draw2DFill.Javaimport java.applet.*;import java.awt.*;import java.awt.geom.*;public class Draw2DFill extends Applet public void paint(Graphics g),上一页,下一页,返回,9.3 2D图像,Graphics2D g2d=(Graphics2D)g;/把父类对象强制转化为子类对象GradientPaint gradColor=new GradientPaint(0.0f,0.0f,Color.blue,200.0f,0.0f,Color.green);g2d.setPaint(gradColor);Rectangle2D rect=new Rectangle2D.Double(0.0,0.0,200.0,60.0);g2d.fill(rect);,上一页,下一页,返回,9.3 2D图像,java.awt.geom包中提供了AffineTransform类,实现图象的平移、缩放和旋转等功能。1.图形的平移 public void translate(double tx,double ty);参数tx指定图形水平方向平移的像素值;参数ty指定图形垂直方向平移的像素值。2.图形的旋转 public void rotate(double theta,double x,double y);第一个参数指定顺时针方向转过的角度,以弧度为单位;参数x和y指定平面图形转动的轴点。,上一页,下一页,返回,9.3 2D图像,3.图形的缩放 public void scale(double sx,double sy);参数sx和sy分别表示x方向和y方向的缩放因子(倍数)。/Draw2DTransform.javaimport java.applet.*;import java.awt.*;import java.awt.geom.*;public class Draw2DTransform extends Applet public void paint(Graphics g),上一页,下一页,返回,9.3 2D图像,Graphics2D g2d=(Graphics2D)g;/把父类对象强制转化为子类对象BasicStroke bstroke=new BasicStroke(2.0f);g2d.setStroke(bstroke);/设置画笔画线的宽度g2d.setColor(Color.blue);AffineTransform transf=new AffineTransform();QuadCurve2D quadCurve=new QuadCurve2D.Double(20.0,20.0,60.0,15.0,80.0,80.0);g2d.draw(quadCurve);,上一页,下一页,返回,9.3 2D图像,transf.translate(100.0,0.0);double rad=Math.toRadians(360.0/30);for(int i=0;i30;i+)transf.rotate(rad,80.0,80.0);g2d.setTransform(transf);g2d.draw(quadCurve);,上一页,下一页,返回,9.3 2D图像,transf.scale(2,2);transf.translate(100.0,0.0);for(int i=0;i30;i+)transf.rotate(rad,80.0,80.0);g2d.setTransform(transf);g2d.draw(quadCurve);,上一页,返回,9.4 动画处理,动画是指连续而平滑地显示多幅图像。动画的质量一方面取决于图像的质量,另一方面则取决于平滑程度。在计算机上,以10一30幅每秒钟的速度显示动画即可达到满意的动画质量。在很多软件尤其是游戏软件的设计中,动画向程序员提出了挑战,但在java中实现动画则是十分简单的事情。下面让我们一起由浅人深地编写几个动画程序实例,并通过对这些实例的逐步改进来探讨Java动画技术的关键。,下一页,返回,9.4 动画处理,9.41 动画原理 其实,计算机动画原理十分简单,首先在屏幕上显示出第一帧画面,过一会儿把它擦掉,然后再显示下一帧画面,如此循环往复。由丰人眼存在着一个视觉差,所以感觉好像 画面中的物体在不断运动。/MovingImg.javaimport java.awt.*;import java.applet.*;public class MovingImg extends Applet Image star,messenger_big;int x=10;public void init(),上一页,下一页,返回,9.4 动画处理,star=getImage(getCodeBase(),merlin.gif);messenger_big=getImage(getCodeBase(),messenger_big.gif);public void paint(Graphics g)g.drawImage(star,0,0,this);g.drawImage(messenger_big,x,15,this);try Thread.sleep(50);x+=5;if(x=210)x=10;Thread.sleep(1000);catch(InterruptedException e),上一页,下一页,返回,9.4 动画处理,repaint();这是一个很简单的动画,在Applet中有一个小人,一个windows message的图标上不断从左边移动到右边。程序中创建了两个Image对象star和messenger_big,在init方法中分别加载了两个图像文件和这两个对象关联起来。添加了变量x用来指定飞船的画出位置,x初始化为l0。在paint方法中,注意到Applet中总是画在指定位置(x,10),而另一个则画在位置(x,15),其中x的值是不断变化的。,上一页,下一页,返回,9.4 动画处理,真正使图标实现动画效果是在trycatch块中。程序调用了sleep方法,它是 Thread类中定义的一个类方法,调用它可使程序休眠指定的毫秒数。sleep方法会产生 中断异常,因此必须放在trycatch块中。如果不调用sleep方法,程序将全速运行,必将导致换帧速度太快,画面闪烁严重。休眠时间设定为50毫秒,相当于换帧速度20(1 00050)。休眠结束后x的值加5,意味着下一帧图标画面的显示位置向右移动5个 点。当飞船移动到最右边即210点位置时,将x赋值10,图标重新回到了左边,这是在语句中实现的。paint方法的最后一条语句是调用repaint方法。repaint方法的功能是重画图像,它 先调用update方法将显示区清空,再调用paint方法画出图像。这就形成了一个循环,paint调用了repaint,而repaint又调用了paint,使图标不间断地来回移动。,上一页,下一页,返回,9.4 动画处理,运行这个Applet时,画面有闪烁现象。一般来说,画面越大,update以背景色清除显示区所占用的时间就越长,不可避免地会产生闪烁。为了达到平滑而又没有闪烁的动画 效果,就应该考虑采取一些补救措施。覆盖update方法可以降低闪烁,但不能消除它。能有效消除闪烁的方法是采用图形 双缓冲技术(graphicsdoublebuffering),请看下面改进后的程序。/MovingImg1.javaimport java.applet.*;import java.awt.*;,上一页,下一页,返回,9.4 动画处理,public class MovingImg1 extends Applet Image star,messenger_big,buffer;Graphics gContext;int x=10;public void init()star=getImage(getCodeBase(),a.jpg);messenger_big=getImage(getCodeBase(),messenger_big.gif);buffer=createImage(getWidth(),getHeight();gContext=buffer.getGraphics();,上一页,下一页,返回,9.4 动画处理,public void paint(Graphics g)gContext.drawImage(star,0,x,this);gContext.drawImage(messenger_big,x,15,this);g.drawImage(buffer,0,0,this);try Thread.sleep(100);x+=2;if(x=210)x=10;Thread.sleep(1000);,上一页,下一页,返回,9.4 动画处理,catch(InterruptedException e)repaint();public void update(Graphics g)paint(g);,上一页,下一页,返回,9.4 动画处理,改进后的程序比原程序增加了buffer和gContext对象,覆盖了update方法。换帧速度提高到100(1 00010),飞船每次移动2个点,动画效果更加平滑而且无闪烁。buffer是新增的Image对象,用作屏幕缓冲区。gContext是新增的Graphics对象,代表着一个图形上下文即绘图区。在init方法中,程序调用createlmage方法,按照 Applet的宽度和高度创建了屏幕缓冲区,然后调用getGraphics方法创建了buffer的绘 图区。paint方法改变了图像输出方向,两个图像都被画在屏幕缓冲区内。由于屏幕缓冲区不可见,使得画面交替时的闪烁现象也不可见。当屏幕缓冲区上的画图完成以后,再调用的drawImage方法将整个屏幕缓冲区拷贝到屏幕上,这个过程是直接覆盖,不会产生闪烁。注:这里将merlin.gif改为a.jpg作为背景,以更新覆盖。,上一页,返回,9.5 播放声音,JDKl3新增了一个功能强大的数字音频类库javaxsound,使Java程序能录制、处理和播放声音和MIDI音频数据。限于篇幅,本节仅介绍如何利用Applet播放各种声音 剪辑。-9.5.1 加载声音文件Java开发工具JDKl早比以前版本支持更多的声音格式,共有5种:AIFF、AU、WAV、MIDI、RMF。音质可为8位或16位的单声道和立体声,采样频率从8 kHz到 48kHz。当然音质越好占用的资源就越多,网络下载时间就越长。对于面向网络的Applet来说,必须考虑声音文件的大小,需要在音质和文件大小之间采取折衷办法。,下一页,返回,9.5 播放声音,在Applet中播放声音十分简单,加载声音文件,然后调用play方法播放即可。Java 提供了两种播放声音的方式:一种是通过Applet类的play方法,一种是通过AudioClip接口中的方法来播放。Applet的play方法可以将声音文件的加载与播放一并完成,其调用格式如下:void play(URL url)vold play(URL url,String name)其中URI。是一个网络地址,网络地址若包含声音文件可采用第一种形式,否则采用第二种形式,播放本地计算机上的声音文件也可采用第二种形式。假设有一个MIDI声音文件tripmid和Applet放在同一个目录下,采用如下调用格式即可播放:play(getCodeBase(),”onestop.mid”);,上一页,下一页,返回,9.5 播放声音,一旦play方法加载了该声音文件,就立即播放。如果找不到指定的声音文件,不会产生异常,只是听不到声音而已。然而,这种播放是一次性的,若要重播必须重新加载声音文件。如果你想把一个声音文件作为背景音乐连续播放,就需要引入功能更强的AudioClip接口,它包含在javaapplet类库中,程序应引入import java.Applet.AudioClip。声音文件的加载在创建AudioClip对象的过程中实现。Applet的getAudioClip方 法可创建这样的对象,该方法加载指定网络地址的声音文件,并返回一个AudioClip对象,调用格式如下:AudioClip getAudioClip(URL url)AudioClip getAudioClip(URL url,String name)创建AudioClip对象后,声音文件即被加载,可调用它的方法处理声音文件。如果该方法没有找到指定的声音文件,将返回null值,此时不能引用所创建的对象。AudioClip只有3个方法:,上一页,下一页,返回,9.5 播放声音,void play()播放一遍;void loop()连续播放;void stop()停止播放。如果只想播放一次,可调用play方法,也可在程序中通过循环调用play方法来控制播放次数。loop方法可实现连续播放,但无法控制播放次数。stop方法用来停止正在播放的声音剪辑。如果需要的话,可以加载多个声音文件一起播放,这些声音将混合起来,就像多重奏一样。在Applet中播放声音.wav文件,上一页,下一页,返回,9.5 播放声音,/PlayWav.javaimport java.applet.*;import.*;public class PlayWav public static void main(String arguments)try URL bgSoundFile=new URL(file:ding.wav);AudioClip bgSound=Applet.newAudioClip(bgSoundFile);URL beepFile=new URL(file:Windows XP 关机.wav);,上一页,下一页,返回,9.5 播放声音,AudioClip beep

    注意事项

    本文(Java程序设计电子教案第九章.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开