标签:
本节介绍 Java程序播放幻灯片和动画,播放声音和视频的方法。
用实例说明播放幻灯片和动画的方法。
【例 12-7】小应用程序先将幻灯片读入数组在存储,单击鼠标变换幻灯片,逐张显示。
1 import java.applet.*import java.awt.*; 2 import java.awt.event.*; 3 public class Example7_7 extends Applet implements MouseListener{ 4 final int number = 50; //假定幻灯片有50张 5 int count = 0; 6 Image[] card = new Image[number]; 7 public void init(){ 8 addMouseListener(this); 9 for (int i = 0; i < number; i++){ 10 card[i] = getImage(getCodeBase(), "DSC0033" + i + ".jpg"); 11 } 12 } 13 public void paint(Graphics g){ 14 if ((card[count]) != null) 15 g.drawImage(card[count], 10, 10, card[count].getWidth(this),card[count].getHeitht(this), this); 16 } 17 public void mousePressed(MouseEvent e){ 18 count = (count + 1) % number; //循环逐张显示 19 repaint(); 20 } 21 public void mouseRelease(MouseEvent e){} 22 public void mouseEntered(MouseEvent e){} 23 public void mouseExited(Mouse Event e){} 24 public void mouseClicked(MouseEvent e){} 25 }
【例 12-8】小应用程序说明播放动画的方法,要求播放的图片和小程序放在相同的目录中,程序通过快速显示一组图片造成显示动画的效果。小应用程序利用线程控制动画图片的逐显示。
1 import java.applet.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 public class Example7_8 extends Applet implements Runnable{ 5 final int number = 50; 6 int count = 0; 7 Thread mythread; 8 Image[] pic = new Image[number]; 9 public void init(){ 10 setSize(300, 200); 11 for (int i = 0; i <= number; i++){ 12 //载入动画图片 13 pic[i - 1] = getImage(getCodeBase(), "DSC0033" + i + ".jpg"); 14 } 15 } 16 public void start(){ 17 mythread = new Thread(this); //创建一个线程 18 mythread.start(); //启动线程执行 19 } 20 public void stop(){ 21 mythread = null; 22 } 23 public void run(){ 24 //线程的执行代码 25 while (true){ 26 repaint(); 27 count = (count + 1) % number; //改变显示的图片号 28 try{ 29 mhythread.sleep(200); 30 } 31 catch (InterruptedExeception e){} 32 } 33 } 34 public void paint(Graphics g){ 35 if ((pic[count] != null) 36 g.drawImage(pic[count], 10, 10, pic[count].getwidth(this), pic[count].getHeight(this), this); 37 } 38 }
Java语言老根据地的音频格式有多种:au、aiff、wav、midi、rfm等。小程序要播放音频文件,可使用类AudioClip,该类在java.applet.AudioClip类库中定义。小程序先创建AudioClip对象,并用getAudioClip()方法为其初始化。代码形式如下:
AudioClip audioClip = getAudioClip(getCodeBase(),”myAudioClipFile.au”);
如果要从网上获得音频文件,可用方法getAudioClip(URL url, String name),根据url地址及音频文件name获得可播放的音频对象。
控制声音的播放有3个方法:play()播放声音,loop()循环播放和stop()停止播放。
【例 12-9】能播放声音的小应用程序。
1 import java.applet.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 public class Example7_9 extends Applet implements ActionListener{ 5 AudioClip clip; //声明一个音频对象 6 Button buttonPlay, buttonLoop, buttonStop; 7 public void init(){ 8 clip = getAudioClip(getCodeBase(), "2.wav"); 9 //根据程序所在地址处声音文件2.wav创建音频对象, 10 //Applet类的getCodeBase()方法可以获得小程序所在的html页面的URL地址。 11 buttonPlay = new Button("开始播放"); 12 buttonLoop = new Button("循环播放"); 13 buttonStop = new Button("停止播放"); 14 buttonPlay.addActionListener(this); 15 buttonStop.addActionListener(this); 16 buttonLoop.addActionListener(this); 17 add(buttonPlay); 18 add(buttonLoop); 19 add(buttonStop); 20 } 21 public void stop(){ 22 clip.stop(); //当离开此页面时停止播放 23 } 24 public void actionPerformed(ActionEvent e){ 25 if (e.getSource() == buttonPlay){ 26 clip.play(); 27 } 28 else if (e.getSource() == buttonLoob){ 29 clip.loop(); 30 } 31 else if (e.getSource() == buttonStop){ 32 clip.stop(); 33 } 34 } 35 }
【例 12-10】如果声音文件较大或网络速度慢会影响小程序的初始化工作。这可用多线程技术解决。在一个级别较低的线程中完成音频对象的创建,即由后台载入声音文件,前台播放。
1 import java.applet.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 public class Hanoi extends applet implements Runnable, ActionListener{ 5 AudioClip clip; //声明一个音频对象 6 textField text; 7 Thread thread; 8 Button buttonPlay, buttonLoop, buttonStop; 9 public void init(){ 10 thread = new Thread(this); //创建新线程 11 thread .setPriority(Thread.MIN_PRIORITY); 12 buttonPlay = new Button("开始播放"); 13 buttonLoop = new Button( "循环播放"); 14 buttonStop = new Button("停止播放"); 15 text = new textField(12); 16 buttonPlay.addActionListener(this); 17 buttonStop.addActionListener(this); 18 buttonLoop.addActionListener(this); 19 add(buttonPlay); 20 add(buttonLoop); 21 add(buttonStop); 22 add(text); 23 } 24 public void start(){ 25 thread.start(); 26 } 27 public void stop(){ 28 clip.stop(); 29 } 30 public void actionPerformed(ActionEvent e){ 31 if (e.getSource() == buttonPlay(){ 32 clip.play(); 33 } 34 else if (e.getSource() == buttonLoop(){ 35 clip.loop(); 36 } 37 else if (e.getSource() == buttonStop(){ 38 clip.stop(); 39 } 40 } 41 public void run(){ 42 //在线程thread 中创建音频对象 43 clip = getAudioclip(getCodeBase(), "2.wav"); 44 text.setText("请稍等"); 45 if(clip ! = null){ 46 buttonPlay.setBackground(Color.red); buttonLoop.setBackground(Color.green); text.setText("您可以播放了"); 47 } //获得音频对象后通知可以播放 48 } 49 }
系列文章:
标签:
原文地址:http://www.cnblogs.com/Coda/p/4598579.html