Java Applet应用:显示图片、播放声音

教学内容

第十讲 Java Applet应用

10.1 显示图像

Java1.0支持显示GIF和JPEG格式的图像文件,这些文件的扩展名为.gif、.jpg或.jpeg。在java.awt.image包、java.awt包和java.applet包中都有对图像的支持。

在Applet中,通过getImage()方法来实现对图像的载入。如果需要,还可以通过MediaTracker类和ImageObserver接口来对图像的载入过程进行追踪。格式如下:

public Image getImage(URL url);

public Image getImage(URL url, String name);

相比前一种,后一种方法更为灵活,可以用Applet类中提供的getCodeBase()方法返回一个URL对象,代表小程序在网络上的地址,这样就可以很方便的将小程序及其所有文件移植到新的Web服务器中。

要显示图像,可调用Graphics类的drawImage()方法,其中有一个参数是ImageObserver,它是Java1.0的java.awt.image包中的一个接口。当需要准确知道Java程序何时完成图像加载时,可使用该参数。如果不需要知道图像加载完成的时间,可用关键字this作为参数,this指当前对象(注:Component类实现了ImageObserver接口)。格式如下:

drawImage(Image img, int x, int y, ImageObserver observer)

drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)

drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)

drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer)

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,ImageObserver observer)

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,Color bgcolor, ImageObserver observer)

【例10.1】显示图像文件。

//Picture.java

package firstapplet;

import java.awt.*;

import java.applet.*;

public class Picture extends Applet {

Image flowermycar;

//Construct the applet

public Picture(){

}

//Initialize the applet

public void init() {

setBackground(Color.red );

flower mycar =getImage(getCodeBase(),”flower1 car.jpg”);

}

//draw the image

public void paint(Graphics screen){

screen.drawImage(flower mycar,10,10,this);

}

}

由于该小程序在包firstapplet中,因此其code为firstapplet.Picture.class,如下:

<applet code=”firstapplet.Picture.class” width=580 height=440>

</applet>

在浏览器IE中的运行效果如图10.1所示:

图10.1 显示图像文件的效果

10.2 播放声音

Applet中播放声音文件与显示图像文件一样方便,同样只需要先将声音文件装载进来,,然后播放就行了。

Java1.0只支持一种音频格式:au文件。Java2平台增加了对AIFF、WAV以及三种MIDI文件类型的支持,三种MIDI文件格式为MIDI文件类型0、MIDI文件类型1以及RMF。

Java提供两种在Applet中播放声音的机制:Applet类的play方法和AudioClip接口的play方法。Applet类的play方法可以装入声音文件并将其播放一次,当播放完毕后,它被标记为垃圾而被回收。Applet类的play方法格式如下:

public void play(URL url);

public void play(URL url, String name);

上述play方法只能将声音播放一遍,若想循环播放某声音作为背景音乐,就需要用到功能更强大的AudioClip类接口,它能更有效的管理声音的播放操作。调用Applet类的getAudioClip()方法得到AudioClip对象,格式如下:

public AudioClip getAudioClip(URL url);

public AudioClip getAudioClip(URL url, String name);

得到AudioClip对象后就可以调用该类对象中提供的方法操作其中的声音数据。需要注意,如果使用了AudioClip对象的loop方法来重复播放背景音乐时,一定要在适当的时候调用AudioClip对象的stop方法来结束放音。否则,即使用户离开这一Web页面,该声音也不会停止。因此,一般在Applet的stop方法中完成停止声音的播放。

【例10.2】将声音作为背景音乐播放。

// AUSound

package firstapplet;

import java.awt.*;

import java.applet.*;

public class AUSound extends Applet {

AudioClip audioClip;

//Construct the applet

public AUSound() {

}

//Initialize the applet

public void init() {

audioClip=getAudioClip(getCodeBase(),”backSound.au”);

//只播放一遍

//audioClip.play();

//循环播放

audioClip.loop() ;

}

//Stop

public void stop(){

audioClip.stop();

}

//paint

public void paint(Graphics screen){

screen.setColor(Color.green );

screen.fillRect(0,0,200,100);

screen.setColor(Color.red );

screen.drawString(“Playing sounds…”,40,50);

}

}

HTML文件中<applet></applet>块:

<applet code=”firstapplet.AUSound.class” width=200 height=100>

</applet>

在浏览器IE中的运行效果如图10.2所示:

图10.2 将声音作为背景音乐播放的效果

【例10.2】综合案例:实现动画显示并配有背景音乐。

程序清单:

// Animation.java

package firstapplet;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class Animation extends Applet implements Runnable{

private int totalImages=3;//total number of images

private Image images[];//an array of images

private int width;

private int height;

private Graphics g;//绘图区域

private Thread runner;//动画线程

private AudioClip sound;//背景音乐

//applet 初始化

public void init(){

images=new Image[totalImages];

MediaTracker mt=new MediaTracker(this);

for(int i=0;i<totalImages;i++){

images[i]=getImage(getCodeBase(),”flower”+i+”.jpg”);

mt.addImage(images[i],i);

}

try{

mt.waitForAll();

}

catch(Exception e){

e.printStackTrace();

}

sound=getAudioClip(getCodeBase(),”backSound.au”);

}

//启动applet

public void start(){

width = this.getSize().width;

height = this.getSize().height;

g = getGraphics();

if(runner==null){

//建立线程

runner=new Thread(this);

//启动线程

runner.start();

}

}

//启动线程

public void run(){

while(true){

sound.loop();

for(int i=0;i<totalImages;i++){

g.drawImage(images[i], 0, 0, width, height, this);

try {

Thread.currentThread().sleep(1000);

}

catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

//停止动画线程

public void stop(){

if(runner!=null){

runner.stop();

runner=null;

}

sound.stop();

System.out.println(“stop”);

}

}

没有预兆目的地在哪,前进的脚步不能停下,

Java Applet应用:显示图片、播放声音

相关文章:

你感兴趣的文章:

标签云: