11.1图像Java支持的图像文件格式有GIF和JPEG格式等。下面分别简单介绍在JavaApplet和应用程序显示图形图像的方法和步骤。1.在Applet中显示图像(1)图像的装载要显示图像先要进行图像的装载。在Applet类中提供了getImage()方法来将指定路径的图像文件装载到Applet中。由于Java语言是面向网络的,因此文件的存储位置不局限于本地机器的磁盘。大部分情况是存取网络中Web服务器上的图像文件。getImage()方法的声明如下:publicImagegetImage(URLurl)获得绝对url地址指定的image对象。publicImagegetImage(URLurl,Stringname)获得绝对url地址指定的image对象,name指明相对于url的image图像文件名。(2)图像的显示在获得Image对象后,可用Graphics类的drawImage()方法显示图像。drawImage()方法有6种不同的重载形式,常用的声明形式为:publicabstractbooleandrawImage(Imageimg,intx,inty,ImageObserverobserver)在点坐标(x,y)处(图像位于该点的右下方)将图像文件img按原样大小显示出来。publicabstractbooleandrawImage(Imageimg,intx,inty,intwidth,intheight,ImageObserverobserver)在坐标(x,y)处将图像文件img按width和height指定的大小显示出来,这种格式能够放大或缩小图像。drawImage()方法在显示完图像的信息后就会返回。若需要使用裁剪效果,也可以使用Graphics类的setClip()方法或clipRect()方法。这些方法的声明如下:publicabstractvoidsetClip(intx,inty,intwidth,intheight)publicabstractvoidclipRect(intx,inty,intwidth,intheight)它们的功能均为以坐标(x,y)为左上角,大小为width和height的矩形设置裁剪区域。【例11.1】在Applet中装载并显示图像。importjava.applet.Applet;importjava.awt.*;publicclassImageDemoextendsApplet{privateImageim;publicvoidinit(){im=getImage(getCodeBase(),images/dog.gif);}publicvoidpaint(Graphicsg){g.drawImage(im,0,0,this);}}程序运行时,需要在Applet程序所在目录的下一级目录images中存储有dog.gif文件。例11.1程序运行结果如下图所示。2.在应用程序中显示图像在应用程序中,装载图像需要使用Toolkit类来实现。一般通过Toolkit类的getDefaultToolkit()方法或通过调用Component类的getToolkit()方法来获得一个Toolkit对象。这两个方法的声明如下:publicstaticToolkitgetDefaultToolkit()//Toolkit类的方法publicToolkitgetToolkit()//Component类的方法【例11.2】在应用程序中装载并显示图像。importjava.awt.*;importjavax.swing.*;classImageDemo1extendsJPanel{privateImageim;publicImageDemo1(){StringimageF=System.getProperty(user.dir)+/sunflowr.jpg;im=getToolkit().getImage(imageF);setBackground(Color.white);}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);g.drawImage(im,0,0,this);}publicstaticvoidmain(String[]args){JPanelpanel=newImageDemo1();JFrameframe=newJFrame(向日葵);frame.setBackground(Color.white);panel.setBackground(Color.white);frame.setSize(200,150);frame.setContentPane(panel);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}例11.2程序运行结果如下图所示。若在程序中显示图像前增加设置裁剪区域的语句,即:g.clipRect(0,10,200,160);//增加这个语句g.drawImage(im,0,0,this);则程序的运行结果如下图所示。11.2动画动画技术的原理是多幅图画每隔一定时间间隔连续进行显示。【例11.3】一个简单的文字滚动的Applet。这个Applet创建一个滚动信息的线程,信息从Applet的显示区域自右至左滚动显示。importjava.applet.Applet;importjava.awt.*;publicclassSimpleBannerextendsAppletimplementsRunnable{Stringmsg=ASimpleMovingBanner.;Threadt=null;intstate;booleanstopFlag;publicvoidinit(){//设置颜色setBackground(Color.cyan);setForeground(Color.red);setFont(newFont(,Font.BOLD,24));}publicvoidstart(){//启动线程t=newThread(this);stopFlag=false;t.start();}publicvoidrun(){//跑动banner线程的进入点charch;for(;;){//显示bannertry{repaint();Thread.sleep(500);ch=msg.charAt(0);msg=msg.substring(1,msg.length());msg+=ch;if(stopFlag)break;}catch(InterruptedExceptione){}}}publicvoidstop(){//暂停bannerstopFlag=true;t=null;}publicvoidpaint(Graphicsg){//显示bannerg.drawString(msg,50,30);}}程序的运行结果如下图所示。【例11.6】这里再给出一个包含动画线程的Java小程序。动画图片文件存储在源文件所在文件夹的子文件夹images/duke下,文件名为T0.jpg至T14.jpg。importjava.awt.*;importjava.awt.image.ImageProducer;importjava.applet.Applet;publicclassThreadsAnimatorextendsAppletimplementsRunnable{Imageimages[];MediaTrackertracker;intindex=0;Threadanimator;intmaxWidth,maxHeight;ImageoffScrImage;GraphicsoffScrGC;booleanloaded=false;//初始化Appletpublicvoidinit(){tracker=newMediaTracker(this);maxWidth=100;maxHeight=100;images=newImage[15];try{offScrImage=createImage(maxWidth,maxHeight);//生成后台缓冲区offScrGC=offScrImage.getGraphics();offScrGC.setColor(Color.lightGray);offScrGC.fillRect(0,0,maxWidth,maxHeight);resize(maxWidth,maxHeight);}catch(Exceptione){e.printStackTrace();}for(inti=0;i15;i++){StringimageFile=newString(images/Duke/T+i+.gif);images[i]=getImage(getDocumentBase(),imageFile):tracker.addImage(images[i],i);}try{tracker.waitForAll();}catch(InterruptedExceptione){}loaded=true;}publicvoidpaint(Graphicsg){if(loaded){g.drawImage(offScrImage,0,0,this);}}publicvoidstart(){if(tracker.checkID(index)){offScrGC.drawImage(images[index],0,0,this);}animator=newThread(this);animator.start();}publicvoidrun(){Threadme=Thread.currentThread();while((animator!=null)&&(animator==me)){if(tracker.checkID(index)){offScrGC.fillRect(0,0,100,100);offScrGC.drawImage(images[index],0,0,this);index++;if(index=images.length){index=0;}}try{animator.sleep(200);}catch(InterruptedExceptione){}repaint();}}}本程序使用了双缓冲区技术来消除动画显示的闪烁。程序运行的显示屏幕如下图所示。11.3声音Java支持应用程序和Applet中的音频。它支持下列音频文件格式:WAV、AIFF和AU(Sun公司支持)。由于AU格式的声音仅有8KHz的采样频率且不支持立体声效果,所以音质不太好。但AU声音文件的尺寸较小,有利于网上传播。此外,它还支持下列基于MIDI(MusicalInstrumentDigitalInterface,乐器数字接口)的歌曲文件格式:MIDITYPE0、MIDITYPE1和RMF(RichMusicFormat)。1.在Applet中播放声音(1)Applet的play()方法Java语言在Applet类中提供的方法play()可以将指定声音文件的装载和播放一并完成,play()方法的声明如下:publicvoidplay(URLurl)播放指定绝对地址URL处的声音文件。publicvoidplay(URLurl,Stringname)播放给定URL相对地址和文件名name的声音文件。其