1、 中国银行多媒体会议系统设计方案 //程序所用到多种程序包 import java.awt.BorderLayout; import java.awt.CheckboxMenuItem; 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
2、awt.Graphics; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.Wi
3、ndowEvent; import javax.media.ControllerClosedEvent; import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.EndOfMediaEvent; import javax.media.GainControl; import javax.media.Manager; import javax.media.MediaLocator; import javax.media.NoPlayerExcept
4、ion; import javax.media.Player; import javax.media.PrefetchCompleteEvent; import javax.media.RealizeCompleteEvent; import javax.media.Time; import javax.swing.JFrame; //本程序对应类; class MediaPlayer extends JFrame implements ActionListener, ControllerListener, ItemListener { //MediaPlay
5、er类变量组员申明; //JMF提供播放器对象; Player player; Component vc, cc, gcc; GainControl gc; //first值用来控制在刚开始程序时显示一幅欢迎界面;loop用以标识是否循环播放; boolean first = true, loop = false; //设置一个字符串统计目前打开文件路径 String currentDirectory; MediaPlayer(String title) { super(title); // 利用一个adapter实现对用户点击窗口系统菜
6、单关闭按钮 // 时响应; addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { //调用dispose以实施windowClosed dispose(); } public void windowClosed(WindowEvent e) { if (player != null) player.close(); System.exit(0); } }); //调用设
7、置程序菜单栏方法组员完成菜单部署 setupMenu(); setSize(400, 400); setVisible(true); } //本方法用以设置程序菜单栏 public void setupMenu() { //设置一个菜单 Menu f = new Menu("文件"); //往设置菜单种添加菜单项 MenuItem mi = new MenuItem("打开"); mi.addActionListener(this); f.add(mi); f.addSeparator();
8、CheckboxMenuItem cbmi = new CheckboxMenuItem("循环", false); cbmi.addItemListener(this); f.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(
9、"播放"); move.addActionListener(this); c.add(move); c.addSeparator(); MenuItem pause = new MenuItem("暂停"); pause.addActionListener(this); c.add(pause); c.addSeparator(); MenuItem stop = new MenuItem("停止"); stop.addActionListener(this); c.add(stop); c.addSeparator()
10、 //设置一个菜单栏 MenuBar mb = new MenuBar(); //将设置菜单依次加入程序菜单栏中去 mb.add(f); mb.add(c); mb.add(l); //将结构完成菜单栏交给目前途序窗口; setMenuBar(mb); } //事件响应组员;捕捉发送到本对象多种事件; public void actionPerformed(ActionEvent e) { //设一个字符串用于暂存打开媒体文件路径; String cufile , selcectfile;
11、if (e.getActionCommand().equals("退出")) { // 调用dispose方便实施windowClosed dispose(); return; } //次事件表明用户选择了"播放"菜单命令; //假如目前有一个文件能够播放则实施播放命令; if (e.getActionCommand().equals("播放")) { if (player != null) { player.start(); } return; } //假如目前正在播放某一文件,则实施暂停
12、 if (e.getActionCommand().equals("暂停")) { if (player != null) { player.stop(); } return; } //次事件表明用户选择了"播放"菜单命令; //假如目前有一个文件能够播放则实施播放命令; if (e.getActionCommand().equals("停止")) { if (player != null) { player.stop(); player.setMediaTime(new Time(0));
13、 } return; } //用户选择要播放媒体文件 if (e.getActionCommand().equals("打开")) { FileDialog fd = new FileDialog(this, "打开媒体文件", FileDialog.LOAD); fd.setDirectory(currentDirectory); fd.show(); // 假如用户放弃选择文件,则返回 if (fd.getFile() == null) return; //保留了所选文件名称及其全路
14、径名称已被稍后使用 //同时设置目前文件夹路径 selcectfile = fd.getFile(); currentDirectory = fd.getDirectory(); cufile = currentDirectory + selcectfile; //将用户选择文件作为一个菜单项加入播放列表该菜单项"名为"该文件名; //被点击后给出命令串是该文件全路径名 MenuItem mi = new MenuItem(selcectfile); mi.setActionCommand(cufile); MenuB
15、ar mb = getMenuBar(); Menu m = mb.getMenu(2); mi.addActionListener(this); m.add(mi); } else { //程序逻辑运行到此表示用户选择了一个"播放列表"中媒体文件 //此时能够经过以下动作取得该文件全路径名; cufile = e.getActionCommand(); selcectfile = cufile; } //假如已存在一个播放器,则先将其关闭,稍后重新创建 //创建播放器时需要捕捉部分异常; if (p
16、layer != null) player.close(); try { player = Manager.createPlayer(new MediaLocator("file:" + cufile)); } catch (java.io.IOException e2) { System.out.println(e2); return; } catch (NoPlayerException e2) { System.out.println("不能找到播放器."); return; } if (player ==
17、 null) { System.out.println("无法创建播放器."); return; } first = false; setTitle(selcectfile); //设置处理播放控制器实际对象; player.addControllerListener(this); player.prefetch(); } //因为实现了"ControllerListener"接口,本方法用于处理媒体播放器传来事件; public void controllerUpdate(ControllerEvent e) {
18、 Container tainer = getContentPane(); // 调用player.close()时ControllerClosedEvent事件出现。 // 假如存在视觉部件,则该部件应该拆除(为一致起见, // 我们对控制面板部件也实施一样操作下一次需要时再结构) if (e instanceof ControllerClosedEvent) { if (vc != null) { remove(vc); vc = null; } if (cc != null) { remove(cc)
19、 cc = null; } return; } //在播放结束时,将播放指针置为文件之首,假如设定了循环播放,则再次开启播放器; if (e instanceof EndOfMediaEvent) { player.setMediaTime(new Time(0)); if (loop) { player.start(); } return; } //PrefetchCompleteEvent事件发生后调用start,正式开启播放 if (e instanceof Prefetch
20、CompleteEvent) { player.start(); return; } //本事件表示因为用于播放资源已经确定;此时要将媒体图形conmopnent //(假如有)显示出来,同时将播放器player控制器显示到窗口里; if (e instanceof RealizeCompleteEvent) { //假如媒体中有图像,将对应图像component载入窗体; vc = player.getVisualComponent(); if (vc != null) tainer.add(vc, BorderL
21、ayout.CENTER); //将对应控制器component载入窗体; cc = player.getControlPanelComponent(); cc.setBackground(Color.BLUE); if (cc != null) tainer.add(cc, BorderLayout.SOUTH); //有部分特殊媒体在播放时提供另外控制手段,将该控制器一并加入窗口; gc = player.getGainControl(); gcc = gc.getControlComponent(); if
22、 (gcc != null) tainer.add(gcc, BorderLayout.NORTH); //依据媒体文件中是否有图像,设定对应窗口大小 if (vc != null) { pack(); return; } else { setSize(300, 75); setVisible(true); return; } } } //菜单状态改变事件响应函数; public void itemStateChanged(ItemEvent e) { lo
23、op = !loop; } //不实施背景清除操作,以免控制面板部件闪烁 //同时使得本程序在用鼠标拖动窗口时存在部分没有立即重绘情况,有待改善 public void update(Graphics g) { paint(g); } //本类main函数,其中结构了本类一个实例; public static void main(String[] args) { new MediaPlayer("简单媒体播放器"); } public void paint(Graphics g) { // 调用超类Framepaint()方法
24、该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 = new Font("DialogInput", Font.BOLD, 18); g.setFont(f); FontMetrics fm = g.getFontMetrics(); int swidth = fm.stringWidth(" 简单媒体播放器 "); g.setColor(Color.white); g.drawString( " 简单媒体播放器 ", (w - swidth) / 2, (h + getInsets().top) / 2); } } }






