版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/程序所用到的各种程序包/本程序对应的类;class MediaPlayerextends JFrameimplements ActionListener, ControllerListener, ItemListener /MediaPlayer类的变量成员的声明;/JMF提供的播放器对象;Player player;Component vc, cc, gcc;GainControl gc;boolean first = true, loop = false;/设立一个字符串记录当前打开文件的路径String currentDirectory;MediaPlayer(String title
2、 super(title;/ 利用一个 adapter 实现对用户点击窗口系统菜单的关闭按钮 / 时的响应;addWindowListener(new WindowAdapter( public void windowClosing(WindowEvent e /调用 dispose 以执行 windowCloseddispose(;public void windowClosed(WindowEvent e if (player != nullplayer.close(;System.exit(0;/调用设置程序菜单栏的方法成员完成菜单的布置setupMenu(;setSize(400, 4
3、00;setVisible(true;/本方法用以设置程序菜单栏public void setupMenu( /设置一个菜单Menu f = new Menu("文件 "/往设置的菜单种添加菜单项MenuItem mi = new MenuItem("打开 "mi.addActionListener(this;f.add(mi;f.addSeparator(;CheckboxMenuItem cbmi = new CheckboxMenuItem("循环 ", false; cbmi.addItemListener(this;f.ad
4、dSeparator(;mi = new MenuItem("退出 "mi.addActionListener(this;f.add(mi;Menu l = new Menu("播放列表 "Menu c = new Menu("播放控制 "MenuItem move = new MenuItem("播放 " move.addActionListener(this;c.add(move;c.addSeparator(;MenuItem pause = new MenuItem("暂停 " paus
5、e.addActionListener(this;c.add(pause;c.addSeparator(;MenuItem stop = new MenuItem("停止 " stop.addActionListener(this;c.add(stop;c.addSeparator(;/设置一个菜单栏MenuBar mb = new MenuBar(;/将设置的菜单依次加入程序的菜单栏中去 mb.add(f;mb.add(c;mb.add(l;/将构造完成的菜单栏交给当前程序的窗口; setMenuBar(mb;/事件响应成员;捕捉发送到本对象的各种事件; public v
6、oid actionPerformed(ActionEvent e /设一个字符串用于暂存打开的媒体文件的路径; String cufile , selcectfile;/ 调用 dispose 以便执行 windowCloseddispose(;return;/次事件表明用户选择了 " 播放 " 菜单命令;/如果当前有一个文件可以播放则执行播放命令;if (e.getActionCommand(.equals("播放 " if (player != null player.start(;return;/如果当前正在播放某一文件,则执行暂停;if (e.
7、getActionCommand(.equals("暂停 " if (player != null player.stop(;return;/次事件表明用户选择了 " 播放 " 菜单命令;/如果当前有一个文件可以播放则执行播放命令;if (e.getActionCommand(.equals("停止 " if (player != null player.stop(;player.setMediaTime(new Time(0;return;/用户选择要播放的媒体文件if (e.getActionCommand(.equals(&qu
8、ot;打开 " FileDialog fd = new FileDialog(this, " 打开媒体文件 ", FileDialog.LOAD; fd.setDirectory(currentDirectory;fd.show(;/ 如果用户放弃选择文件,则返回if (fd.getFile( = nullreturn;/保存了所选文件的名称及其全路径名称已被稍后使用/同时设置当前文件夹路径selcectfile = fd.getFile(;currentDirectory = fd.getDirectory(;cufile = currentDirectory
9、+ selcectfile;/将用户选择的文件作为一个菜单项加入播放列表该菜单项 " 名为 " 该文件名; /被点击后给出的命令串是该文件的全路径名MenuItem mi = new MenuItem(selcectfile;mi.setActionCommand(cufile;MenuBar mb = getMenuBar(;Menu m = mb.getMenu(2;mi.addActionListener(this;m.add(mi; else /程序逻辑运行到此表示用户选择了一个 " 播放列表 " 中的媒体文件/此时可以通过如下动作获得该文件的全
10、路径名;cufile = e.getActionCommand(;selcectfile = cufile;/如果已存在一个播放器,则先将其关闭,稍后重新创建/创建播放器时需要捕捉一些异常;if (player != nullplayer.close(;try player = Manager.createPlayer(new MediaLocator("file:" + cufile;return; catch (NoPlayerException e2 return;if (player = null return;first = false;setTitle(selc
11、ectfile;/设置处理播放控制器实际的对象; player.addControllerListener(this; player.prefetch(; /因为实现了"ControllerListener"接口,本方法用于处理媒体播放器传来的事件; public void controllerUpdate(ControllerEvent e Container tainer = getContentPane(; / / / if 调用 player.close(时 ControllerClosedEvent 事件出现。 如果存在视觉部件,则该部件应该拆除(为一致起见, 我
12、们对控制面板部件也执行同样的操作下一次需要时再构造) (e instanceof ControllerClosedEvent if (vc != null remove(vc; vc = null; if (cc != null remove(cc; cc = null; return; /在播放结束时,将播放指针置为文件之首,如果设定了循环播放,则再次启动播 放器; if (e instanceof EndOfMediaEvent player.setMediaTime(new Time(0; if (loop player.start(; return; /PrefetchComplete
13、Event 事件发生后调用 start,正式启动播放 if (e instanceof PrefetchCompleteEvent player.start(; return; /本事件表示由于用于播放的资源已经确定;此时要将媒体的图形 conmopnent /(如果有)显示出来,同时将播放器 player 的控制器显示到窗口里; if (e instanceof RealizeCompleteEvent /如果媒体中有图像,将对应图像 component 载入窗体; vc = player.getVisualComponent(; if (vc != null tainer.add(vc,
14、BorderLayout.CENTER; /将对应控制器 component 载入窗体; cc = player.getControlPanelComponent(; cc.setBackground(Color.BLUE; if (cc != null tainer.add(cc, BorderLayout.SOUTH; /有一些特殊媒体在播放时提供另外的控制手段,将该控制器一并加入窗口; gc = player.getGainControl(; gcc = gc.getControlComponent(; if (gcc != null tainer.add(gcc, BorderLayo
15、ut.NORTH; /根据媒体文件中是否有图像,设定相应的窗口大小 if (vc != null pack(; return; else setSize(300, 75; setVisible(true; return; /菜单状态改变事件的响应函数; public void itemStateChanged(ItemEvent e loop = !loop; /不执行背景清除操作,以免控制面板部件闪烁 /同时使得本程序在用鼠标拖动窗口时存在一些没有及时重绘的情况,有待改进 public void update(Graphics g paint(g; /本类的 main 函数,其中构造了本类的
16、一个实例; public static void main(String args new MediaPlayer("简单媒体播放器" public void paint(Graphics g / 调用超类 Frame 的 paint(方法,该 paint(方法将调用 Frame 包含的各个容器 / 和部件(包括控制面板部件)的 paint(方法。 super.paint(g; /以下代码实现了在开启程序之初显示欢迎界面 if (first int w = getSize(.width; int h = getSize(.height; g.setColor(Color.magenta; g.fillRect(0, 0, w, h; Font f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 太阳能发电降水施工合同
- 私人医疗中心财务守则
- 剧院外墙施工合同
- 生态农业供水泵系统招标
- 铁合金生产设备节能
- 数据中心工程进度承诺
- 商铺转让协议范本
- 体育赛事国网工作票管理办法
- 2025赠与合同以及司法解释
- 木材加工招投标合同
- 2024-2029年益生菌项目商业计划书
- 康复质控中心工作计划
- 咖啡的微观世界智慧树知到期末考试答案章节答案2024年成都师范学院
- 2024-2030年国内工业用金属桶行业市场发展分析及发展前景与投资机会研究报告
- DZ/T 0462.9-2023 矿产资源“三率”指标要求 第9部分:盐湖和盐类矿产(正式版)
- 小学生普法教育完整课件
- 60岁以上用工免责协议
- (“双减”作业案例)“鱼米之乡”-一长江三角洲地区(第一课时)
- 湘教版中考地理一轮复习:八年级上、下册知识点考点背诵提纲
- 农牧区劳动力转移就业工作方案
- 《化学制药技术》课件-国内外化学制药发展趋势
评论
0/150
提交评论