播放幻灯片和动画
用实例说明播放幻灯片和动画的方法。
【例】小应用程序先将幻灯片读入数组在存储,单击鼠标变换幻灯片,逐张显示。
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 = 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, buttonstop; public void init(){ 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); 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); buttonloop.addactionlistener(this); add(buttonplay); add(buttonloop); add(buttonstop); add(text); } public void start(){ thread.start(); } public void 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("您可以播放了"); } //获得音频对象后通知可以播放 } }
如对本文有疑问, 点击进行留言回复!!
Postgresql结合postgis使用java的JDBC连接
网友评论