1Java课程设计报告.docx
- 文档编号:17260063
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:18
- 大小:82.72KB
1Java课程设计报告.docx
《1Java课程设计报告.docx》由会员分享,可在线阅读,更多相关《1Java课程设计报告.docx(18页珍藏版)》请在冰点文库上搜索。
1Java课程设计报告
《Java程序设计》课程设计报告
题目:
音乐播放器
学院:
计算机科学与工程学院
专业:
信息管理与信息系统
学生姓名:
周琦
学号:
1400320217
指导教师:
汪华登
2015年10月24日
目录
1.前言1
2.需求分析1
3.概要设计1
4.详细设计1
5.测试1
6.总结1
参考文献2
附录2
1.前言
随着社会电子音乐文件的与日俱增,作为现在最流行的音乐文件mp3的的数量与规模也比以往的任何时候要多,无论是电台DJ需要使用方便有效的管理自己所使用的音乐文件,还是个人,在计算机日益普及的今天,若采用一套有效的音乐播放器,将自己所收藏的大量的音乐文件随时随地的播放,这将方便于众用户听音乐的需求,通过使用本音乐播放器为音乐爱好者带来意想不到的收获。
2.需求分析
(1)软件必须使用Java实现,具有图形界面。
(2)软件运行时最好可以选择背景音乐,并可选择播放或者暂停、停止音乐。
(3)播放器软件具有单独添加一首歌曲或添加一个文件夹中的全部音乐文件的功能。
(4)音乐播放时可以选择暂停、播放、停止等选项。
(5)播放模式可以有顺序播放、单曲循环、随机播放等至少3种模式。
(6)能显示一首音乐播放的进度。
(7)可能的情况下,实现能显示歌词、可改变软件界面风格等其它辅助功能,可获得加分。
3.概要设计
结合需求分析来看,整个设计包含了音乐播放器的基本功能:
单曲循环,顺序播放,随机播放,添加文件,添加文件夹,上一首,暂停,下一首,关于等。
该音乐播放器设置了一个窗口,运行程序打开窗口,窗口包含菜单栏,每个菜单栏包含多个菜单选项,里面有添加文件,添加文件夹等按键供用户操作使用。
4.详细设计
JavaApplet的运行原理:
JavaApplet程序是Java语言中的一种特殊的镶入式程序,JavaApplet程序由浏览器中内置的JVM负责执行,而不是由安装在操作系统上的JVM执行,这也是称JavaApplet程序为镶入式程序的原因,当初也正是因为JavaApplet程序让许多人了解了Java。
一个javaapplet程序中必须有一个类是Applet类的子类,称该子类是JavaApplet程序的主类,并且主类必须被修饰喂public的。
Applet类是java.applet包中的一个类,同时还是java.awt包中Container类的子类,因此,JavaApplet程序的主类的实例是一个容器,用户可以再这个容器中添加按钮,处理组件事件,完成一些工作。
源代码
packagejwxin;
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{//Serializable防止一些异常发生
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("/Users/jieke_pc/Downloads/b.jpg");
privateImageIconiconPre=newImageIcon("/Users/jieke_pc/Downloads/a.jpg");
privateImageIconiconNext=newImageIcon("/Users/jieke_pc/Downloads/c.jpg");
privateImageIconiconPause=newImageIcon("/Users/jieke_pc/Downloads/d.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());//边界布局
//边界布局分为5个方向,上北下南左西右东中
controlPanel=newJPanel();//初始化面板
controlPanel.setLayout(newFlowLayout());//面板使用流式布局
/**
*使用FlowLayout布局方式的容器中组件按照加入的先后顺序
*按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,
*一行排满(即组件超过容器宽度后)到下一行开始继续排列。
*/
btnPlay=newJButton(iconPlay);
btnPre=newJButton(iconPre);
btnNext=newJButton(iconNext);
btnPlay.addActionListener(this);//鼠标监听,监听对象为当前类
//当前类必须实现actionPerformed方法
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);
//默认情况下,该文件选择器只能选择一个文件,
//通过该方法可以设置允许选择多个文件(设置参数为true即可)
if(jfc.showOpenDialog(frame)==JFileChooser.APPROVE_OPTION){//如果点击了ok
File[]files=jfc.getSelectedFiles();
//如果将文件选择器设置为允许选择多个文件,则返回选中文件的列表(File[])
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=li
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 报告