java简单媒体播放器源码.docx
- 文档编号:25543075
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:9
- 大小:17.29KB
java简单媒体播放器源码.docx
《java简单媒体播放器源码.docx》由会员分享,可在线阅读,更多相关《java简单媒体播放器源码.docx(9页珍藏版)》请在冰豆网上搜索。
java简单媒体播放器源码
//程序所用到的各种程序包
importjava.awt.BorderLayout;
importjava.awt.CheckboxMenuItem;
importjava.awt.Color;
importjava.awt.Component;
importjava.awt.Container;
importjava.awt.FileDialog;
importjava.awt.Font;
importjava.awt.FontMetrics;
importjava.awt.Graphics;
importjava.awt.Menu;
importjava.awt.MenuBar;
importjava.awt.MenuItem;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.ItemEvent;
importjava.awt.event.ItemListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjavax.media.ControllerClosedEvent;
importjavax.media.ControllerEvent;
importjavax.media.ControllerListener;
importjavax.media.EndOfMediaEvent;
importjavax.media.GainControl;
importjavax.media.Manager;
importjavax.media.MediaLocator;
importjavax.media.NoPlayerException;
importjavax.media.Player;
importjavax.media.PrefetchCompleteEvent;
importjavax.media.RealizeCompleteEvent;
importjavax.media.Time;
importjavax.swing.JFrame;
//本程序对应的类;
classMediaPlayer
extendsJFrame
implementsActionListener,ControllerListener,ItemListener{
//MediaPlayer类的变量成员的声明;
//JMF提供的播放器对象;
Playerplayer;
Componentvc,cc,gcc;
GainControlgc;
booleanfirst=true,loop=false;
//设立一个字符串记录当前打开文件的路径
StringcurrentDirectory;
MediaPlayer(Stringtitle{
super(title;
//利用一个adapter实现对用户点击窗口系统菜单的关闭按钮//时的响应;
addWindowListener(newWindowAdapter({
publicvoidwindowClosing(WindowEvente{
//调用dispose以执行windowClosed
dispose(;
}
publicvoidwindowClosed(WindowEvente{
if(player!
=null
player.close(;
System.exit(0;
}
};
//调用设置程序菜单栏的方法成员完成菜单的布置
setupMenu(;
setSize(400,400;
setVisible(true;
}
//本方法用以设置程序菜单栏
publicvoidsetupMenu({
//设置一个菜单
Menuf=newMenu("文件";
//往设置的菜单种添加菜单项
MenuItemmi=newMenuItem("打开";
mi.addActionListener(this;
f.add(mi;
f.addSeparator(;
CheckboxMenuItemcbmi=newCheckboxMenuItem("循环",false;cbmi.addItemListener(this;
f.addSeparator(;
mi=newMenuItem("退出";
mi.addActionListener(this;
f.add(mi;
Menul=newMenu("播放列表";
Menuc=newMenu("播放控制";
MenuItemmove=newMenuItem("播放";move.addActionListener(this;
c.add(move;
c.addSeparator(;
MenuItempause=newMenuItem("暂停";pause.addActionListener(this;
c.add(pause;
c.addSeparator(;
MenuItemstop=newMenuItem("停止";stop.addActionListener(this;
c.add(stop;
c.addSeparator(;
//设置一个菜单栏
MenuBarmb=newMenuBar(;
//将设置的菜单依次加入程序的菜单栏中去mb.add(f;
mb.add(c;
mb.add(l;
//将构造完成的菜单栏交给当前程序的窗口;setMenuBar(mb;
}
//事件响应成员;捕捉发送到本对象的各种事件;publicvoidactionPerformed(ActionEvente{
//设一个字符串用于暂存打开的媒体文件的路径;Stringcufile,selcectfile;
//调用dispose以便执行windowClosed
dispose(;
return;
}
//次事件表明用户选择了"播放"菜单命令;
//如果当前有一个文件可以播放则执行播放命令;
if(e.getActionCommand(.equals("播放"{
if(player!
=null{
player.start(;
}
return;
}
//如果当前正在播放某一文件,则执行暂停;
if(e.getActionCommand(.equals("暂停"{
if(player!
=null{
player.stop(;
}
return;
}
//次事件表明用户选择了"播放"菜单命令;
//如果当前有一个文件可以播放则执行播放命令;
if(e.getActionCommand(.equals("停止"{
if(player!
=null{
player.stop(;
player.setMediaTime(newTime(0;
}
return;
}
//用户选择要播放的媒体文件
if(e.getActionCommand(.equals("打开"{
FileDialogfd=newFileDialog(this,"打开媒体文件",FileDialog.LOAD;fd.setDirectory(currentDirectory;
fd.show(;
//如果用户放弃选择文件,则返回
if(fd.getFile(==null
return;
//保存了所选文件的名称及其全路径名称已被稍后使用
//同时设置当前文件夹路径
selcectfile=fd.getFile(;
currentDirectory=fd.getDirectory(;
cufile=currentDirectory+selcectfile;
//将用户选择的文件作为一个菜单项加入播放列表该菜单项"名为"该文件名;//被点击后给出的命令串是该文件的全路径名
MenuItemmi=newMenuItem(selcectfile;
mi.setActionCommand(cufile;
MenuBarmb=getMenuBar(;
Menum=mb.getMenu(2;
mi.addActionListener(this;
m.add(mi;
}else{
//程序逻辑运行到此表示用户选择了一个"播放列表"中的媒体文件
//此时可以通过如下动作获得该文件的全路径名;
cufile=e.getActionCommand(;
selcectfile=cufile;
}
//如果已存在一个播放器,则先将其关闭,稍后重新创建
//创建播放器时需要捕捉一些异常;
if(player!
=null
player.close(;
try{
player=Manager.createPlayer(newMediaLocator("file:
"+cufile;
}catch(java.io.IOExceptione2{
System.out.println(e2;
return;
}catch(NoPlayerExceptione2{
System.out.println("不能找到播放器.";
return;
}
if(player==null{
System.out.println("无法创建播放器.";
return;
}
first=false;
setTitle(selcectfile;
//设置处理播放控制器实际的对象;player.addControllerListener(this;player.prefetch(;}//因为实现了"ControllerListener"接口,本方法用于处理媒体播放器传来的事件;publicvoidcontrollerUpdate(ControllerEvente{Containertainer=getContentPane(;//////if调用player.close(时ControllerClosedEvent事件出现。
如果存在视觉部件,则该部件应该拆除(为一致起见,我们对控制面板部件也执行同样的操作下一次需要时再构造)(einstanceofControllerClosedEvent{if(vc!
=null{remove(vc;vc=null;}if(cc!
=null{remove(cc;cc=null;}return;}//在播放结束时,将播放指针置为文件之首,如果设定了循环播放,则再次启动播放器;if(einstanceofEndOfMediaEvent{player.setMediaTime(newTime(0;if(loop{player.start(;}return;}//PrefetchCompleteEvent事件发生后调用start,正式启动播放if(einstanceofPrefetchCompleteEvent{player.start(;return;}//本事件表示由于用于播放的资源已经确定;此时要将媒体的图形conmopnent//(如果有)显示出来,同时将播放器player的控制器显示到窗口里;if(einstanceofRealizeCompleteEvent{
//如果媒体中有图像,将对应图像component载入窗体;vc=player.getVisualComponent(;if(vc!
=nulltainer.add(vc,BorderLayout.CENTER;//将对应控制器component载入窗体;cc=player.getControlPanelComponent(;cc.setBackground(Color.BLUE;if(cc!
=nulltainer.add(cc,BorderLayout.SOUTH;//有一些特殊媒体在播放时提供另外的控制手段,将该控制器一并加入窗口;gc=player.getGainControl(;gcc=gc.getControlComponent(;if(gcc!
=nulltainer.add(gcc,BorderLayout.NORTH;//根据媒体文件中是否有图像,设定相应的窗口大小if(vc!
=null{pack(;return;}else{setSize(300,75;setVisible(true;return;}}}//菜单状态改变事件的响应函数;publicvoiditemStateChanged(ItemEvente{loop=!
loop;}//不执行背景清除操作,以免控制面板部件闪烁//同时使得本程序在用鼠标拖动窗口时存在一些没有及时重绘的情况,有待改进publicvoidupdate(Graphicsg{paint(g;}//本类的main函数,其中构造了本类的一个实例;
publicstaticvoidmain(String[]args{newMediaPlayer("简单媒体播放器";}publicvoidpaint(Graphicsg{//调用超类Frame的paint(方法,该paint(方法将调用Frame包含的各个容器//和部件(包括控制面板部件)的paint(方法。
super.paint(g;//以下代码实现了在开启程序之初显示欢迎界面if(first{intw=getSize(.width;inth=getSize(.height;g.setColor(Color.magenta;g.fillRect(0,0,w,h;Fontf=newFont("DialogInput",Font.BOLD,18;g.setFont(f;FontMetricsfm=g.getFontMetrics(;intswidth=fm.stringWidth("简单媒体播放器";g.setColor(Color.white;g.drawString("简单媒体播放器",(w-swidth/2,(h+getInsets(.top/2;}}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 简单 媒体播放器 源码