⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediaplayer.java

📁 一个简单的java音乐播放器
💻 JAVA
字号:

package midiaplayer;

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.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.WindowEvent;

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.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFrame;
import javax.swing.JOptionPane;




public class MediaPlayer extends JFrame implements ActionListener,ControllerListener,ItemListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Player player;
	 String currentDirectory;
	 Component vc, cc,gcc;
	GainControl gc;
	 boolean first = true, loop = false;
	MediaPlayer(String title){
    	 super(title);
    	 //利用一个adapter实现用户对窗口的关闭
    	 //实时响应
    	 addWindowListener(new WindowAdapter(){
    		 public void windowClosing(WindowEvent e){
    		 //用dispose实行windowClose
    		dispose();
    		}
    	 public void windowClosed(WindowEvent e){
    		 if(player!=null)
    			 player.close();
    		 System.exit(0);
    	 }
    		
	});
    	 setupMenu();
    	 setSize(400,400);
    	 setVisible(true);
     }

	private void setupMenu() {
		Menu menu=new Menu("文件");
		MenuItem mi =new MenuItem("打开");
		mi.addActionListener(this);
		menu.add(mi);
		menu.addSeparator();
		CheckboxMenuItem chmi = new CheckboxMenuItem("循环",false);
		chmi.addActionListener(this);
		menu.add(chmi);
		menu.addSeparator();
		MenuItem miexit=new MenuItem("退出");
		miexit.addActionListener(this);
		menu.add(miexit);
		Menu playCtrol=new Menu("播放控制");
		MenuItem playmp3=new MenuItem("播放");
		playmp3.addActionListener(this);
		playCtrol.add(playmp3);
		playCtrol.addSeparator();
		MenuItem pause =new MenuItem("暂停");
		pause.addActionListener(this);
		playCtrol.add(pause);
		playCtrol.addSeparator();
		MenuItem stopplay= new MenuItem("停止");
		stopplay.addActionListener(this);
		playCtrol.add(stopplay);
		playCtrol.addSeparator();
		Menu playList =new Menu("播放列表");
		MenuBar mb =new MenuBar();
		mb.add(menu);
		mb.add(playCtrol);
		mb.add(playList);
		setMenuBar(mb);
		
		
		
		
	}

	public void actionPerformed(ActionEvent e) {
		String cufile,selectfile;
		if(e.getActionCommand().equals("退出")){
			 JOptionPane.showMessageDialog(this,"您已退出xp播放器");
			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(new Time(0));
			}
		}
		//用户选择要播放的文件
		if(e.getActionCommand().equals("打开")){
			FileDialog fd=new FileDialog(this,"打开媒体文件",FileDialog.LOAD);
			fd.setDirectory(currentDirectory);
			fd.show();
			//如果用户放弃选择则返回
			if(fd.getFile () == null){
				return;
			}
			//保存所选的文件的名称其全部路径名称,以备稍后使用
			selectfile=fd.getFile();
			currentDirectory=fd.getDirectory();
			cufile=currentDirectory+selectfile;
			//将用户选择的文件作为一个菜单项加入播放列表
			//被点击显示全路径没
			MenuItem mi=new MenuItem(selectfile);
			mi.setActionCommand(cufile);
			MenuBar mb =getMenuBar();
			//获取指定的菜单
			Menu m= mb.getMenu(2);
			mi.addActionListener(this);
			m.add(mi);
		}else{
			//程序运行到此,说明用户选择了一个播放列表中的文件
			//此时可以通过如下获得全路径名
			cufile=e.getActionCommand();
			selectfile=cufile;
		}
		//如果动作起源于播放列表菜单上
		//如果已经存在一个播放器,则先将其关闭,稍后重新创建
		//创建时需要捕捉异常
		JOptionPane.showMessageDialog(this,"您已退出xp播放器");
		if(player!=null){
			JOptionPane.showMessageDialog(this,"您已退出xp播放器");
			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==null){
				System.out.println("无法创建播放器");
				return;
			}
			first=false;
			setTitle(selectfile);
			player.addControllerListener(this);
			player.prefetch();
		}
	}
	

	public void itemStateChanged(ItemEvent e) {
		loop=!loop;
		
	}
    //本方法用来处理媒体播放器传来的事件
	public void controllerUpdate(ControllerEvent e) {
		Container tainer=getContentPane();
		/**
		 * 调用player.close()是controllerClosedEvent事件出现
		 * 如果存在视觉部件,则该部件拆除(为一致起见,我们归空间棉班不见也实行同样的操作下一次需要时再构造)
		 */
		if(e instanceof ControllerClosedEvent){
			if(vc!=null){
				remove(vc);
				vc=null;
				
			}
			if(cc!=null){
				remove(cc);
				cc=null;
			}
			return;
		}
		//播放结束时,把播放指针放在文件之首,如果设定了循环播放,则再次开启
		if(e instanceof EndOfMediaEvent){
			
			if(loop){
				player.setMediaTime(new Time(0));
				player.start();
			}
			return;
		}
		if (e instanceof PrefetchCompleteEvent) 
		{ 
		player.start (); 
		return; 
		} 
		//本事件用于资源已经确定;此时要将图形conponent显示出来,将对应的图象载入窗体
		if(e instanceof RealizeCompleteEvent){
			vc=player.getVisualComponent();
			if(vc!=null)
				tainer.add(vc,BorderLayout.CENTER);
			//将对应控制器载入窗体
			cc=player.getControlPanelComponent();
			cc.setBackground(Color.BLUE);
			if(cc!=null){
				tainer.add(cc, BorderLayout.SOUTH);
			}
			//有一些媒体提供另外的控制手段,将该控制器一起加入
			gc=player.getGainControl();
			gcc=player.getControlPanelComponent();
			if(gcc!=null){
				tainer.add(gcc,BorderLayout.NORTH);
			}
			if(vc!=null){
				pack();
				return;
				
			}else{
				setSize(300,75);
				setVisible(true);
				return;
			}
		}
	}

	public void update(Graphics g){
		paint(g);
	}
	public void paint(Graphics g){
		super.paint (g);
		if(first){
			int w=getSize().width;
			int h=getSize().height;
			g.setColor(Color.black);
			g.fillRect(0, 0, w, h);
			Font f=new Font("DialogInput",Font.BOLD,18);
			g.setFont(f);
			FontMetrics fm =g.getFontMetrics();
			g.setColor(Color.white);
			int swidth=fm.stringWidth("小潘啵啵");
			g.drawString("小潘啵啵", (w-swidth)/2,(h+getInsets().top)/2);
		}
		
	}
	public static void main(String args[]){
		MediaPlayer md=new MediaPlayer("xp");
		
		md.setVisible(true);
		
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -