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

📄 mp3events.java

📁 这是一个用java&JMF编写的流媒体播放系统
💻 JAVA
字号:
package com.gamvan.medias;

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;

import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
/**
 * 这个类用来捕捉和监听各个控件所引发的事件
 * */
class MP3Events implements 
		ActionListener,ControllerListener,MouseListener{

	private static final long serialVersionUID = 1L;
	
	private Player player;//jmf中的player类
	private Component visualMedia;//视频组件
	private Component mediaControl;//媒体组件
	private int m = 0;//url数组的索引值
	private File[] mediaFiles;//媒体文件数组
	private PanelLayout panelLayout = new PanelLayout();//实例化播放其面板
	private URL fileURLs[] = new URL[50];//播放曲目的url地址,最大50首
	JList mp3List = new JList();//展示mp3的列表
	
	public MP3Events(){}
	//调用界面初始化函数
	public void mainInit(){//主要界面函数调用
		int compositeRule = AlphaComposite.SRC_OVER;
		AlphaComposite alphaComposite =
			AlphaComposite.getInstance(compositeRule,(float) 0.7);
		alphaComposite.equals(mp3List);
		//为各个item添加事件源监听器
		panelLayout.menuItem_1_1.addActionListener(this);
		panelLayout.menuItem_1_2.addActionListener(this);
		
		panelLayout.menuItem_2_1.addActionListener(this);
		panelLayout.menuItem_2_2.addActionListener(this);
		panelLayout.menuItem_2_3.addActionListener(this);
		panelLayout.menuItem_2_4.addActionListener(this);
		panelLayout.menuItem_2_5.addActionListener(this);
		
		panelLayout.menuItem_3_1.addActionListener(this);
		
		mp3List.addMouseListener(this);//为mp3列表添加鼠标事件监听器
		
		JScrollPane scrollPane = new JScrollPane();//实例化滚动条面板

		panelLayout.init();//调用panelLayout类的frame面板
		panelLayout.toolbar();//调用panelLayout类的toolBar面板
		panelLayout.menu();//调用panelLayout类的menu面板
		//为panelLayout类中,即播放器的gui面板中添加mp3的列表项控件
		panelLayout.container.add(mp3List,BorderLayout.CENTER);
		//给容器中添加滚动面板
		panelLayout.container.add(scrollPane,BorderLayout.CENTER);
		scrollPane.getViewport().setView(mp3List);//给mp3列表添加滚动条

		panelLayout.setVisible(true);
	}

	public void actionPerformed(ActionEvent arg0) {
		JFileChooser fileChooser = new JFileChooser();//实例化文件选择对话框
		Vector vector = new Vector();//实例化一个向量类,用来添加mp3文件
		//单击menuItem_1_1后所显示的信息
		JLabel messageLabel = new JLabel("本软件由今晚在线工作室制作!" +
				"  欢迎访问我们的网站,www.GamVan.com");
		
		Object source = arg0.getSource();//声明一个对象类,用来获得鼠标单击的对象
		
		if(source == panelLayout.menuItem_1_2)//单击退出
			System.exit(0);
		
		if(source == panelLayout.menuItem_1_1)//单击“关于我们”,则显示相应的信息
			JOptionPane.showMessageDialog(null, messageLabel,
					"系统信息", JOptionPane.INFORMATION_MESSAGE);
		
		if(source== panelLayout.menuItem_3_1){//用来添加媒体文件
			////////////////////////////////////////////////
			fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
			fileChooser.setMultiSelectionEnabled(true);//支持复选
			int result = fileChooser.showOpenDialog(panelLayout);
			
			mediaFiles = fileChooser.getSelectedFiles();//获得用户选择的多个媒体文件
			if(result == JFileChooser.APPROVE_OPTION){//获得用户行为
				
				if(mp3List != null){//添加媒体文件
					vector.removeAllElements();
					mp3List.setListData(vector);
				}
				for(int i = 0 ;i < mediaFiles.length; i++){
					vector.add(mediaFiles[i].getName());
					mp3List.setListData(vector);
				}//end for
			}//end if
			
		if(mediaFiles != null){//获文件的url地址
			for(int i = 0; i < mediaFiles.length; i++){
				try {
					fileURLs[i] = mediaFiles[i].toURL();
				} catch (MalformedURLException e) {
					e.printStackTrace();
				}
				
			}//end for
		}
		
			if(fileURLs[m] != null){//调用播放文件的函数
				startPlayer(fileURLs[m]);
				
		}//end if
		
	}//end  if
		if(source == panelLayout.menuItem_2_1){//单击停止
			if(player != null){
				player.setMediaTime(new Time(0));
				player.stop();
			}
		}
		
		if(source == panelLayout.menuItem_2_2){//单击开始
			if(player != null)
				player.start();
		}
		
		if(source == panelLayout.menuItem_2_3){//单击暂停
			if(player != null)
				player.stop();
		}//end  if
		
		if(source == panelLayout.menuItem_2_4){//单击上一首歌曲
			if(player != null){
				if(m != 0){
					m = m - 1;
					startPlayer(fileURLs[m]);
				}else{
				JOptionPane.showMessageDialog(panelLayout, "这是第一首歌曲!_!");
				}
			}
		}

		if(source == panelLayout.menuItem_2_5){//单击下一首歌曲
			if(player != null){
				if(m != mediaFiles.length - 1 ){
					m = m + 1;
					startPlayer(fileURLs[m]);
				}else{
					JOptionPane.showMessageDialog(panelLayout, "这是最后一首歌曲!_!");
				}
			}	
	 }
		
	}


	
	public void startPlayer(URL address){//用来播放媒体文件的方法
			if(player != null)
				if(visualMedia != null)//如果播放器非空则移去先前的播放器组件
					panelLayout.container.remove(visualMedia);
					if(mediaControl != null){//如果视频播放控制组件非空则移去播放控制组件
						panelLayout.container.remove(mediaControl);
						player.close();
					}
					//媒体定位器
						MediaLocator mediaLocator = new MediaLocator(address);
						if (mediaLocator == null) {//显示错误信息
							JOptionPane.showMessageDialog(panelLayout, "打开文件错误!");
							return;
						}
					try{
						//得到播放器实例
						player = Manager.createPlayer(mediaLocator);
						player.addControllerListener((ControllerListener) this);
						player.realize();
					}catch(Exception ex){
						ex.printStackTrace();
						JOptionPane.showMessageDialog(panelLayout, "打开文件错误!");
					}
					
					
	}
//	取得媒体播放组件
	public  synchronized void controllerUpdate(ControllerEvent event){
		
		if(event instanceof RealizeCompleteEvent){//初始化媒体文件
			player.prefetch();
		}//end if
			
		if(event instanceof PrefetchCompleteEvent){//预取媒体数据
			//如果视频组件非空则移去先前的组件
			if((visualMedia = player.getVisualComponent())!= null){
				panelLayout.container.add(visualMedia,BorderLayout.CENTER);
				panelLayout.setVisible(true);
			}//end if
			if((mediaControl = player.getControlPanelComponent()) != null){
				
				panelLayout.container.add(mediaControl,BorderLayout.SOUTH);
				panelLayout.setVisible(true);
				
			}// end if
			
			player.start();//开始播放文件
			
		}// end if
		
		if (event instanceof EndOfMediaEvent) {
			
			player.setMediaTime(new Time(0));
			  if(m == mediaFiles.length - 1){//监测是否为最后一首歌曲。用于循环
				  m = 0; 
				  startPlayer(fileURLs[m]);
				  return;  
			  }else{
				  m = m + 1; 
				  startPlayer(fileURLs[m]);
			  }
		   }//end if
		
	}//end cotrollererUpdate()

	public void mouseClicked(MouseEvent arg0) {//双击媒体文件列表的曲目会播放
		
		if(arg0.getClickCount() == 2 ){
			m = mp3List.getSelectedIndex();
			startPlayer(fileURLs[m]);
		}
	}

	public void mousePressed(MouseEvent arg0) {}
	
	public void mouseReleased(MouseEvent arg0) {}
	
	public void mouseEntered(MouseEvent arg0) {}
	
	public void mouseExited(MouseEvent arg0) {}
	
}


⌨️ 快捷键说明

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