播放幻燈片和動畫
用實例說明播放投影片和動畫的方法。
【例】小應用程式先將投影片讀入數組在存儲,點選滑鼠變換幻燈片,逐張顯示。
import java.applet.*import java.awt.*;import java.awt.event.*;public class Example7_7 extends Applet implements MouseListener{ final int number = 50; //假設投影片有50張int count = 0; Image [] card = new Image[number]; public void init(){ addMouseListener(this); for (int i = 0; i < number; i++){ card[i] = getImage(getCodeBase(), "DSC0033" + i + ".jpg"); } } public void paint(Graphics g){ if ((card [count]) != null) g.drawImage(card[count], 10, 10, card[count].getWidth(this),card[count].getHeitht(this), this); } public void mousePressed(MouseEvent e){ count = (count + 1) % number; //循環逐張顯示repaint( ); } public void mouseRelease(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(Mouse Event e){} public void mouseClicked(MouseEvent e){}}
【例】小應用程式說明播放動畫的方法,要求播放的圖片和小程式放在相同的目錄中,程式透過快速顯示一組圖片造成顯示動畫的效果。小應用程式利用線程控制動畫圖片的逐顯示。
import java.applet.*;import java.awt.*;import java.awt.event.*;public class Example7_8 extends Applet implements Runnable{ final int number = 50; int count = 0; Thread mythread; Image[] pic = Image[] pic = Image[] pic = Image[] pic = Image[] pic = 0; new Image[number]; public void init(){ setSize(300, 200); for (int i = 0; i <= number; i++){ //載入動畫圖片pic[i - 1] = getImage(getCodeBase(), "DSC0033" + i + ".jpg"); } } public void start(){ mythread = new Thread(this); //建立一個執行緒mythread.start(); //啟動執行緒執行} public void stop(){ mythread = null; } public void run(){ //執行緒的執行碼while (true){ repaint(); count = (count + 1) % number; //改變顯示的圖片號碼try{ mhythread .sleep(200); } catch (InterruptedExeception e){} } } public void paint(Graphics g){ if ((pic[count] != null) g.drawImage(pic[count], 10, 10, pic[count].getwidth(this), pic[count].getHeight(this), this); }}
播放聲音
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()停止播放。
【例】能播放聲音的小應用程式。
import java.applet.*;import java.awt.*;import java.awt.event.*;public class Example7_9 extends Applet implements ActionListener{ AudioClip clip; //宣告一個音訊物件Button buttonPlay, buttonLoop, oidtonStop; (){ clip = getAudioClip(getCodeBase(), "2.wav"); //根據程式所在位址處聲音檔案2.wav建立音訊對象, //Applet類別的getCodeBase()方法可以取得小程式所在的html頁面的URL位址。 buttonPlay = new Button("開始播放"); buttonLoop = new Button("循環播放"); buttonStop = new Button("停止播放"); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListenerenerenerener (this); add(buttonPlay); add(buttonLoop); add(buttonStop); } public void stop(){ clip.stop(); //離開此頁面時停止播放} public void actionPerformed(ActionEvent e){ if (e.getSource() == buttonPlay){ clip.play(); } else if (e.getSource() == buttonLoob){ clip.loop(); } else if (e.getSource() == buttonStop){ clip.stop(); } }}
【例】如果聲音檔案較大或網路速度慢會影響小程式的初始化工作。這可用多線程技術解決。在一個較低等級的執行緒中完成音訊物件的創建,即由後台載入聲音文件,前台播放。
import java.applet.*;import java.awt.*;import java.awt.event.*;public class Hanoi extends applet implements Runnable, ActionListener{ AudioClip clip; //宣告一個音訊物件textField text; Thread thread; Button buttonPlay; , buttonLoop, buttonStop; public void init(){ thread = new Thread(this); //建立新執行緒thread .setPriority(Thread.MIN_PRIORITY); buttonPlay = new Button("開始播放"); buttonLoop = new Button( "循環播放"); buttonStop = new Button("停止播放" ); text = new textField(12); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); stop(){ clip.stop(); } public void actionPerformed(ActionEvent e){ if (e.getSource() == buttonPlay(){ clip.play(); } else if (e.getSource() == buttonLoop(){ clip.loop(); } else if (e.getSource() == buttonStop(){ clip.stop(); } } public void run(){ //在執行緒thread 中建立音訊物件clip = getAudioclip(getCodeBase(), "2.wav"); text.setText("請稍等"); if(clip ! = null){ buttonPlay.setBackground(Color.red); buttonLoop.setBackground(Color.green); text.setText("您可以播放了"); } //取得音訊物件後通知可以播放}}