基于java的音乐播放器的设计源代码+实验报告.docx
- 文档编号:11903591
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:23
- 大小:44.93KB
基于java的音乐播放器的设计源代码+实验报告.docx
《基于java的音乐播放器的设计源代码+实验报告.docx》由会员分享,可在线阅读,更多相关《基于java的音乐播放器的设计源代码+实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
基于java的音乐播放器的设计源代码+实验报告
主类MUSICPLAYER类:
importjava.util.*;
importjavax.swing.JSlider;
importjava.awt.BorderLayout;
importjava.awt.FlowLayout;
importjava.awt.Point;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.io.Serializable;
importjavax.media.ControllerEvent;
importjavax.media.ControllerListener;
importjavax.media.EndOfMediaEvent;
importjavax.media.Manager;
importjavax.media.MediaLocator;
importjavax.media.NoPlayerException;
importjavax.media.Player;
importjavax.media.PrefetchCompleteEvent;
importjavax.media.Time;
importjavax.swing.ButtonGroup;
importjavax.swing.DefaultListModel;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JList;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JRadioButtonMenuItem;
importjavax.swing.JScrollBar;
importjavax.swing.JScrollPane;
importjavax.swing.filechooser.FileNameExtensionFilter;
publicclassMusicPlayerimplementsActionListener,Serializable,ControllerListener
{
privatestaticfinallongserialVersionUID=1L;
privateJFrameframe=null;
privateJPanelcontrolPanel=null;
privateJButtonbtnPlay=null;
privateJButtonbtnPre=null;
privateJButtonbtnNext=null;
privateJScrollPanelistPane=null;
privateJListlist=null;
privateDefaultListModellistModel=null;
privateJMenuBarmenubar=null;
privateJMenumenuFile=null,menuAbout=null,menuMode=null;
privateJMenuItemitemOpen,itemOpens,itemExit,itemAbout;
privateJRadioButtonMenuItemitemSingle,itemSequence,itemRandom;
privateListItemcurrentItem=null;
privatestaticPlayerplayer=null;
privatebooleanisPause=false;
privateintmode;
privateintcurrentIndex;
privateImageIconiconPlay=newImageIcon("d:
\\1.jpg");
privateImageIconiconPre=newImageIcon("d:
\\3.jpg");
privateImageIconiconNext=newImageIcon("d:
\\2.jpg");
privateImageIconiconPause=newImageIcon("d:
\\4.jpg");
publicstaticvoidmain(String[]args)
{
newMusicPlayer();
}
publicMusicPlayer()
{
init();
}
publicvoidinit()
{
frame=newJFrame();
frame.setTitle("音乐播放器");
frame.setSize(400,300);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menubar=newJMenuBar();
menuFile=newJMenu("文件");
menuAbout=newJMenu("关于");
menuMode=newJMenu("播放模式");
itemOpen=newJMenuItem("添加文件");
itemOpens=newJMenuItem("添加文件夹");
itemExit=newJMenuItem("退出");
itemAbout=newJMenuItem("关于");
itemOpen.addActionListener(this);
itemOpens.addActionListener(this);
itemExit.addActionListener(this);
itemAbout.addActionListener(this);
itemSequence=newJRadioButtonMenuItem("顺序播放");
itemSequence.setSelected(true);
itemSingle=newJRadioButtonMenuItem("单曲循环");
itemSequence.addActionListener(this);
itemRandom=newJRadioButtonMenuItem("随机播放");
itemRandom.addActionListener(this);
itemSingle.addActionListener(this);
ButtonGroupbg=newButtonGroup();
bg.add(itemRandom);
bg.add(itemSequence);
bg.add(itemSingle);
menuFile.add(itemOpen);
menuFile.add(itemOpens);
menuFile.add(itemExit);
menuAbout.add(itemAbout);
menuMode.add(itemSequence);
menuMode.add(itemSingle);
menuMode.add(itemRandom);
menubar.add(menuFile);
menubar.add(menuAbout);
menubar.add(menuMode);
frame.setJMenuBar(menubar);
frame.setLayout(newBorderLayout());
controlPanel=newJPanel();
controlPanel.setLayout(newFlowLayout());
btnPlay=newJButton(iconPlay);
btnPre=newJButton(iconPre);
btnNext=newJButton(iconNext);
btnPlay.addActionListener(this);
btnPre.addActionListener(this);
btnNext.addActionListener(this);
controlPanel.add(btnPre);
controlPanel.add(btnPlay);
controlPanel.add(btnNext);
listPane=newJScrollPane();
listModel=load();
list=newJList(listModel);
if(list.getSelectedIndex()==-1&&listModel.size()>0)
{
currentItem=(ListItem)listModel.get(0);
list.setSelectedIndex(0);
currentIndex=0;
}
listPane.getViewport().add(list);
list.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente)
{
if(e.getClickCount()==2)
{
if(player!
=null)
{
player.close();
btnPlay.setIcon(iconPlay);
}
currentIndex=list.locationToIndex(e.getPoint());
currentItem=(ListItem)listModel.get(currentIndex);
list.setSelectedIndex(currentIndex);
play();
}
}
});
frame.setLayout(newBorderLayout());
frame.add(controlPanel,BorderLayout.NORTH);
frame.add(listPane,BorderLayout.CENTER);
frame.setVisible(true);
};
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==itemOpen)
{//addfiles
JFileChooserjfc=newJFileChooser();
FileNameExtensionFilterfilter=newFileNameExtensionFilter("音乐文件","mp3","wav");
jfc.setFileFilter(filter);
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
jfc.setMultiSelectionEnabled(true);
if(jfc.showOpenDialog(frame)==JFileChooser.APPROVE_OPTION)
{
File[]files=jfc.getSelectedFiles();
for(Filef:
files)
{
ListItemitem=newListItem(f.getName(),f.getAbsolutePath());
listModel.addElement(item);
}
}
}
elseif(e.getSource()==itemOpens)
{//addfilesinadirectory
JFileChooserjfc=newJFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(jfc.showOpenDialog(frame)==JFileChooser.APPROVE_OPTION)
{
Filedirectory=jfc.getSelectedFile();
File[]files=directory.listFiles(newjava.io.FileFilter()
{
publicbooleanaccept(Filef)
{
if(f.getName().toLowerCase().endsWith(".mp3")||f.getName().toLowerCase().endsWith(".wav"))
returntrue;
returnfalse;
}
});
for(Filefile:
files)
{
ListItemitem=newListItem(file.getName(),file.getAbsolutePath());
listModel.addElement(item);
}
save(listModel);
}
}
elseif(e.getSource()==itemExit)
{
System.exit(0);
}
elseif(e.getSource()==itemAbout)
{
JOptionPane.showMessageDialog(frame,"作者:
陆鑫");
}
elseif(e.getSource()==btnPlay)
{
//playorpause
play();
}
elseif(e.getSource()==btnPre)
{
pre();
}
elseif(e.getSource()==btnNext)
{//nextmusic
next();
}
elseif(e.getSource()==itemSequence)
{
mode=0;
}
elseif(e.getSource()==itemSingle)
{
mode=1;
}
elseif(e.getSource()==itemRandom)
{
mode=2;
}
}
//playcontrol
/**
*播放
*/
publicvoidplay()
{
if(btnPlay.getIcon()==iconPlay)
{
if(isPause)
{
player.start();
System.out.println("暂停结束");
isPause=false;
}
else
{
try
{
player=Manager.createPlayer(newMediaLocator("file:
"+currentItem.getPath()));
player.addControllerListener(this);//提取媒体内容
player.prefetch();
}
catch(NoPlayerExceptione1)
{
e1.printStackTrace();
}
catch(IOExceptione1)
{
e1.printStackTrace();
}
}
btnPlay.setIcon(iconPause);
}
else
{
player.stop();
isPause=true;
System.out.println("暂停");
btnPlay.setIcon(iconPlay);
}
}
publicvoidnext()
{
if(currentIndex==listModel.getSize()-1)
{
currentIndex=0;
}
else
{
currentIndex++;
}
currentItem=(ListItem)listModel.get(currentIndex);
list.setSelectedIndex(currentIndex);
Pointp=list.indexToLocation(currentIndex);
JScrollBarjScrollBar=listPane.getVerticalScrollBar();//获得垂直转动条
jScrollBar.setValue(p.y);//设置垂直转动条位置
btnPlay.setIcon(iconPlay);
if(player!
=null)
player.close();
isPause=false;
play();
}
publicvoidrand()
{
list.setSelectedIndex((int)(Math.random()%(listModel.getSize()-1)));
Pointp=list.indexToLocation((int)(Math.random()%(listModel.getSize()-1)));
JScrollBarjScrollBar=listPane.getVerticalScrollBar();
jScrollBar.setValue(p.y);
btnPlay.setIcon(iconPlay);
if(player!
=null)
player.close();
isPause=false;
play();
}
publicvoidpre()
{
if(currentIndex==0)
{
currentIndex=listModel.getSize()-1;
}
else
{
currentIndex--;
}
currentItem=(ListItem)listModel.get(currentIndex);
list.setSelectedIndex(currentIndex);
Pointp=list.indexToLocation(currentIndex);
JScrollBarjScrollBar=listPane.getVerticalScrollBar();//获得垂直转动条
jScrollBar.setValue(p.y);//设置垂直转动条位置
btnPlay.setIcon(iconPlay);
if(player!
=null)
{
player.close();
}
isPause=false;
play();
}
//endplaycontrol
publicDefaultListModelload()
{
Filefile=newFile("list.lst");
DefaultListModeldlm=newDefaultListModel();
if(file.exists())
{
try
{
ObjectInputStreamois=newObjectInputStream(
newFileInputStream(file));
Integersize=(Integer)ois.readObject();
if(size!
=0)
{
for(inti=0;i { ListItemitem=(ListItem)ois.readObject(); dlm.addElement(item); } } ois.close(); returndlm; } catch(FileNotFoundExceptione) { e.print
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java 音乐 播放 设计 源代码 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)