小巧Java版媒体播放器

原创 2006年05月21日 15:39:00

    最近软件工程做了个Java版的媒体播放器,我把代码进行了精缩了一下,嘿嘿,从上千行的代码缩成了250多行:),不过功能也少了很多哦,没有了列表,没有了文件过滤等等功能。不过麻雀虽小,五脏俱全哦,播放mp3、mpg、mpeg、avi等等音乐文件没问题哦!算是简装版啦,嘿嘿!下面是代码!

package edu.whu.bbflyerwww.mymusic;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.RealizeCompleteEvent;
import javax.media.PrefetchCompleteEvent;
import javax.media.bean.playerbean.MediaPlayer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JPanel;
import javax.swing.JOptionPane;

/**
 * 小巧的媒体播放器MyMusic(java实现)<br>
 * 基于JMF(Java Media Framework)实现<br>
 * 没有很复杂的功能,没有很漂亮的界面,仅仅娱乐用<br>
 * @environment eclipse
 * @author bbflyerwww
 * @email bbflyer@qq.com
 * @free_version
 */

public class MyMusic extends JFrame implements ControllerListener {
 MediaPlayer player; // 媒体播放器
 JPanel center; // getContentPane() 可视组件,放v_part
 JPanel south;  // getContentPane() 控制组件,放c_part
 Component v_part;
 Component c_part;
 JFileChooser chooser; // 文件选择

 /**
  * 构造函数
  */
 public MyMusic() {
  initialize();
  this.setVisible(true);
 }

 /**
  * App初始化
  */
 private void initialize() {
  this.setTitle("MyMusic");
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  initJMenuBar();
  initJContentPane();
  updateUI();
  initComponents();
 }

 /**
  * 初始化菜单布局和事件
  */
 private void initJMenuBar() {
  JPopupMenu.setDefaultLightWeightPopupEnabled(false);
  final JMenu file = new JMenu("File");
  final JMenuItem fileopen = new JMenuItem("Open Local Music...");
  final JMenuItem appexit = new JMenuItem("Exit");
  file.add(fileopen);
  file.addSeparator();
  file.add(appexit);
  fileopen.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    cmdOpenMusic();
   }
  });
  appexit.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    cmdAppExit();
   }
  });
  final JMenu help = new JMenu("Help");
  final JMenuItem about = new JMenuItem("About...");
  help.add(about);
  about.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    cmdAppAbout();
   }
  });
  final JMenuBar bar = new JMenuBar();
  bar.add(file);
  bar.add(help);
  this.setJMenuBar(bar);
 }

 /**
  * 初始化ContentPane
  */
 private void initJContentPane() {
  this.getContentPane().setLayout(new BorderLayout());
  center = new JPanel();
  south = new JPanel();
  center.setLayout(new BorderLayout());
  south.setLayout(new BorderLayout());
  this.getContentPane().add(center, BorderLayout.CENTER);
  this.getContentPane().add(south, BorderLayout.SOUTH);
  setJCenterBackground();
 }

 /**
  * 初始化设置窗体背景
  */
 private void setJCenterBackground() {
  final String picture = "edu//whu//bbflyerwww//image//枫中奇缘.jpg";
  final Icon icon = new ImageIcon(picture);
  final JLabel label = new JLabel(icon);
  center.add(label, BorderLayout.CENTER);
 }

 /**
  * 更新设置窗体显示的屏幕位置
  */
 private void updateJLocation() {
  Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();
  Dimension fsize = this.getSize();
  if (fsize.height > scr.height)
   fsize.height = scr.height;
  if (fsize.width > scr.width)
   fsize.width = scr.width;
  this.setLocation((scr.width - fsize.width) / 2,
    (scr.height - fsize.height) / 2);
 }

 /**
  * 更新整个窗口界面
  */
 private void updateUI() {
  this.pack();
  this.validate();
  updateJLocation();
 }

 /**
  * 初始化其他组件
  */
 private void initComponents() {
  player = new MediaPlayer();
  player.addControllerListener(this);
  chooser = new JFileChooser();
 }
 
 /**
  * 释放资源
  */
 private void close() {
  this.dispose();
  if (player != null) {
   player.close();
  }
 }
 
 /**
  * 关于
  */
 private void cmdAppAbout() {
  JOptionPane.showMessageDialog(this,
    "@author:bbflyerwww",
    "about",
    JOptionPane.PLAIN_MESSAGE);
 }
 
 /**
  * 退出系统
  */
 private void cmdAppExit() {
  close();
  System.exit(0);
 }
 
 /**
  * 打开本地媒体文件对话框
  */
 private void cmdOpenMusic() {
  int value = chooser.showOpenDialog(this);
  if (value == JFileChooser.APPROVE_OPTION) {
   String filename = chooser.getSelectedFile().toString();
   play(filename);
  }
 }

 /**
  * 实现播放
  * @param MediaName
  */
 private void play(String MediaName) {
  try {
   URL mediaURL = new URL("file:" + MediaName);
   play(mediaURL);
  } catch (Exception e) {
   System.out.println("您输入的文件有问题");
   e.printStackTrace();
  }
 }

 /**
  * 实现播放
  * @param url
  * @throws Exception
  */
 private void play(URL url) throws Exception {
  player.setMediaLocation(url.toString());
  player.realize();
 }

 /**
  * 实现ControllerListener接口
  * @param event
  */
 public void controllerUpdate(ControllerEvent event) {
  if (event instanceof RealizeCompleteEvent) {
   if (v_part != null)
    center.remove(v_part);
   if ((v_part = player.getVisualComponent()) != null)
    center.add(v_part, BorderLayout.CENTER);
   else
    setJCenterBackground();
   if (c_part != null)
    south.remove(c_part);
   if ((c_part = player.getControlPanelComponent()) != null)
    south.add(c_part, BorderLayout.SOUTH);
   player.prefetch();
  }
  if (event instanceof PrefetchCompleteEvent) {
   updateUI();
   player.start();
  }
 }

 public static void main(String args[]) {
  new MyMusic();
 }

}

  以下抓几个图啦,嘿嘿

使用java创建一个简易的视屏播放器

最近有个多媒体的作业,要求使用visualC++和opencv编写一个简易的视屏播放器,对于C/C++残疾者而言是不可能的,于是萌生了用java编写的想法。具体经验分享一下。   目标:制作...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

一个简单音乐播放器的java实现(一)

写在前面 这几天正在读head first系列的书籍,现在正好读的是java。这本书讲的深入浅出,环环相扣,非常精彩,不妨安利给大家,顺便把我学习过程中的一些心得体会已经实例分享出来。1.一个最简单...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

用JAVA写一个视频播放器

前言跳过废话,直接看正文当年入坑java是因为它的跨平台优势。那时我认为,”编写一次,处处运行。”这听上去多么牛逼,应该是所有语言发展的终极之道,java势必会一统天下。然而事实证明,那时的我还是太年...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Java多媒体播放器(一)

Java下进行多媒体播放器的开发十分简单,有着很多成熟的扩展类包和相关开源播放器支持,本文将将介绍5类常见的Java多媒体框架。 No.1 JMF与FMJ 一、简介         JMF:T...

一个简单的java播放器

import java.applet.*; import java.awt.*; import java.awt.event.*; import java.net.*; import javax.sw...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小巧Java版媒体播放器
举报原因:
原因补充:

(最多只允许输入30个字)