版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/程序所用到的各种程序包import java.awt.BorderLayout;kboxMenuItem;import java.awt.Color;import java.awt.Component;import java.awt.Container;import java.awt.FileDialog;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;i
2、mport java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.aener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;rClosedEvent;import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOf
3、MediaEvent;import ontrol;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoPlayerException;import javax.media.Player;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;e;import javax.swing.JFrame;/本程序对应的类;class MediaPlayerextends JFrameimpl
4、ements ActionListener, ControllerListener, ItemListener /MediaPlayer类的变量成员的声明;/JMF提供的播放器对象;Player player;Component vc, cc, gcc;GainControl gc;/first值用来控制在刚开始程序时显示一幅欢迎界面;loop用以标记是否循环播放;boolean first = true, loop = false;/设立一个字符串记录当前打开文件的路径String currentDirectory;MediaPlayer(String title) super(title)
5、;/ 利用一个adapter实现对用户点击窗口系统菜单的关闭按钮 / 时的响应; addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) /调用dispose以执行windowCloseddispose();public void windowClosed(WindowEvent e) if (player != null)player.close();System.exit(0););/调用设置程序菜单栏的方法成员完成菜单的布置setupMenu();setSize(400, 400);se
6、tVisible(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.
7、add(cbmi);f.addSeparator();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 MenuIt
8、em("暂停");pause.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)
9、;/事件响应成员;捕捉发送到本对象的各种事件;public void actionPerformed(ActionEvent e) /设一个字符串用于暂存打开的媒体文件的路径;String cufile , selcectfile;if (e.getActionCommand().equals("退出") / 调用dispose以便执行windowClosed dispose();return;/次事件表明用户选择了"播放"菜单命令;/如果当前有一个文件可以播放则执行播放命令;if (e.getActionCommand().equals("播
10、放") 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
11、.setMediaTime(new Time(0);return;/用户选择要播放的媒体文件if (e.getActionCommand().equals("打开") FileDialog fd = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);fd.setDirectory(currentDirectory);fd.show();/ 如果用户放弃选择文件,则返回 if (fd.getFile() = null)return;/保存了所选文件的名称及其全路径名称已被稍后使用/同时设置当前文件夹路径selc
12、ectfile = fd.getFile();currentDirectory = fd.getDirectory();cufile = currentDirectory + selcectfile;/将用户选择的文件作为一个菜单项加入播放列表该菜单项"名为"该文件名;/被点击后给出的命令串是该文件的全路径名MenuItem mi = new MenuItem(selcectfile);mi.setActionCommand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListen
13、er(this);m.add(mi); else /程序逻辑运行到此表示用户选择了一个"播放列表"中的媒体文件/此时可以通过如下动作获得该文件的全路径名;cufile = e.getActionCommand();selcectfile = cufile;/如果已存在一个播放器,则先将其关闭,稍后重新创建/创建播放器时需要捕捉一些异常;if (player != null)player.close();try player = Manager.createPlayer(new MediaLocator("file:" + cufile); catch (
14、java.io.IOException e2) System.out.println(e2);return; catch (NoPlayerException e2) System.out.println("不能找到播放器.");return;if (player = null) System.out.println("无法创建播放器.");return;first = false;setTitle(selcectfile);/设置处理播放控制器实际的对象;player.addControllerListener(this);player.prefetc
15、h();/因为实现了"ControllerListener"接口,本方法用于处理媒体播放器传来的事件;public void controllerUpdate(ControllerEvent e) Container tainer = getContentPane();/ 调用player.close()时ControllerClosedEvent事件出现。 / 如果存在视觉部件,则该部件应该拆除(为一致起见, / 我们对控制面板部件也执行同样的操作下一次需要时再构造)if (e instanceof ControllerClosedEvent) if (vc != nul
16、l) 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;/PrefetchCompleteEvent事件发生后调用start,正式启动播放if (e instanceof PrefetchCompleteEvent) player.start()
17、;return;/本事件表示由于用于播放的资源已经确定;此时要将媒体的图形conmopnent/(如果有)显示出来,同时将播放器player的控制器显示到窗口里;if (e instanceof RealizeCompleteEvent) /如果媒体中有图像,将对应图像component载入窗体;vc = player.getVisualComponent();if (vc != null)tainer.add(vc, BorderLayout.CENTER);/将对应控制器component载入窗体;cc = player.getControlPanelComponent();cc.setB
18、ackground(Color.BLUE);if (cc != null)tainer.add(cc, BorderLayout.SOUTH);/有一些特殊媒体在播放时提供另外的控制手段,将该控制器一并加入窗口;gc = player.getGainControl();gcc = gc.getControlComponent();if (gcc != null)tainer.add(gcc, BorderLayout.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)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026第十师北屯市公益性岗位招聘11人笔试备考试题及答案解析
- 2026年马鞍山学院人才招聘笔试备考试题及答案解析
- 2026四川省医学科学院四川省人民医院护理人员招聘25人(第二次)笔试备考试题及答案解析
- 2026中国科学院杭州医学研究所招聘科研人员、工程技术人员、博士后(常年)笔试备考题库及答案解析
- 2026四川九洲君合私募基金管理有限公司招聘风控总监等岗位7人笔试备考题库及答案解析
- 2026北京市农林科学院招聘32人笔试备考题库及答案解析
- 2026晋城市妇幼保健院招聘专业技术人员(14人)笔试备考试题及答案解析
- 2026招商银行总行、分行及子公司春季校园招聘笔试备考试题及答案解析
- 2026中国人民财产保险股份有限公司永修支公司招聘(江西)笔试备考题库及答案解析
- 2026广东广州花都区炭步镇大涡小学招聘临聘教师1人笔试备考题库及答案解析
- 人教版八年级数学下册期末解答题《几何知识》提分训练卷(含答案)
- 7.2《“白山黑水”-东北三省》教案-人教版地理八年级下册
- 2026年鞍山锅炉水处理考试试题
- 2025年公费医学生选岗面试题库及答案
- 2025-2030中国家电供应链行业市场现状供需分析及投资评估规划分析研究报告
- 山东省济南市2025届中考数学试题(含答案)
- 云南红河个旧市人民医院党委办公室需招聘干事1名(2024年第28期)笔试备考题库及答案详解1套
- 西安民宿管理办法
- 企业人力资源管理制度
- 医学诊断证明书规范与管理体系
- 一年级数学上册《排队问题专项训练》
评论
0/150
提交评论