📄 mp3events.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 + -