1_Java课程设计源代码
更新时间:2023-05-19 23:16:01 阅读量: 实用文档 文档下载
- 1jan推荐度:
- 相关推荐
java音乐播放器实验报告
package jwxin;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.Time;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.filechooser.FileNameExtensionFilter;
java音乐播放器实验报告
public class MusicPlayer implements
ActionListener,Serializable,ControllerListener { //Serializable防止一些异常发生
private static final long serialVersionUID = 1L;
private JFrame frame = null;
private JPanel controlPanel = null;
private JButton btnPlay = null;
private JButton btnPre = null;
private JButton btnNext = null;
private JScrollPane listPane = null;
private JList list = null;
private DefaultListModel listModel = null;
private JMenuBar menubar = null;
private JMenu menuFile = null, menuAbout = null, menuMode = null; private JMenuItem itemOpen, itemOpens, itemExit, itemAbout;
private JRadioButtonMenuItem itemSingle, itemSequence, itemRandom; private ListItem currentItem = null;
private static Player player = null;
private boolean isPause = false;
private int mode;
private int currentIndex;
private ImageIcon iconPlay = new
ImageIcon("/Users/jieke_pc/Downloads/b.jpg");
private ImageIcon iconPre = new
ImageIcon("/Users/jieke_pc/Downloads/a.jpg");
private ImageIcon iconNext = new
ImageIcon("/Users/jieke_pc/Downloads/c.jpg");
private ImageIcon iconPause = new
ImageIcon("/Users/jieke_pc/Downloads/d.jpg");
public static void main(String[] args) {
new MusicPlayer();
}
public MusicPlayer() {//自动调用构造方法
init();//调用 方法
}
public void init() {
frame = new JFrame();//创建一个窗口
frame.setTitle("音乐播放器");//设置窗口的标题
frame.setSize(400, 300);//设置窗口的大小
frame.setResizable(false);//设置窗口大小不可编辑
java音乐播放器实验报告
frame.setLocationRelativeTo(null);//设置窗口居中
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭的时候终止进程
menubar = new JMenuBar();//菜单栏
menuFile = new JMenu("文件");//菜单
menuAbout = new JMenu("关于");
menuMode = new JMenu("播放模式");
itemOpen = new JMenuItem("添加文件");//菜单项
itemOpens = new JMenuItem("添加文件夹");
itemExit = new JMenuItem("退出");
itemAbout = new JMenuItem("关于");
itemOpen.addActionListener(this);//添加一个鼠标监听
itemOpens.addActionListener(this);
itemExit.addActionListener(this);
itemAbout.addActionListener(this);
itemSequence = new JRadioButtonMenuItem("顺序播放");//单选按钮 itemSequence.setSelected(true);
itemSingle = new JRadioButtonMenuItem("单曲循环");
itemSequence.addActionListener(this);
itemRandom = new JRadioButtonMenuItem("随机播放");
itemRandom.addActionListener(this);
itemSingle.addActionListener(this);
ButtonGroup bg = new ButtonGroup();//按钮组
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(new BorderLayout());//边界布局
//边界布局分为5个方向,上北下南左西右东中
controlPanel = new JPanel();//初始化面板
controlPanel.setLayout(new FlowLayout());//面板使用流式布局 /**
* 使用FlowLayout布局方式的容器中组件按照加入的先后顺序
* 按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,
java音乐播放器实验报告
}; * 一行排满(即组件超过容器宽度后)到下一行开始继续排列。 */ btnPlay = new JButton(iconPlay); btnPre = new JButton(iconPre); btnNext = new JButton(iconNext); btnPlay.addActionListener(this);//鼠标监听,监听对象为当前类 //当前类必须实现actionPerformed方法 btnPre.addActionListener(this); btnNext.addActionListener(this); controlPanel.add(btnPre);//按钮加入面板 controlPanel.add(btnPlay); controlPanel.add(btnNext); listPane = new JScrollPane(); listModel = load(); //调用方法 list = new JList(listModel); if (list.getSelectedIndex() == -1 && listModel.size() > 0) { currentItem = (ListItem) listModel.get(0); list.setSelectedIndex(0); currentIndex = 0; } listPane.getViewport().add(list); list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { 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(new BorderLayout()); frame.add(controlPanel, BorderLayout.NORTH); frame.add(listPane, BorderLayout.CENTER); frame.setVisible(true);
java音乐播放器实验报告
public void actionPerformed(ActionEvent e) { //监听事件的执行命令
if (e.getSource() == itemOpen) { // add files 添加文件
JFileChooser jfc = new JFileChooser();//创建一个文件选择对话框 FileNameExtensionFilter filter = new FileNameExtensionFilter( "音乐文件", "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 (File f : files) {
ListItem item = new ListItem(f.getName(),
f.getAbsolutePath());
listModel.addElement(item);
}
}
} else if (e.getSource() == itemOpens) {// add files in a directory 添加文件夹
JFileChooser jfc = new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if (jfc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { File directory = jfc.getSelectedFile();
File[] files = directory.listFiles(new java.io.FileFilter() { public boolean accept(File f) {
if (f.getName().toLowerCase().endsWith(".mp3") ||
f.getName().toLowerCase().endsWith(".wav"))
return true;
return false;
}
});
for (File file : files) {
ListItem item = new ListItem(file.getName(),
file.getAbsolutePath());
java音乐播放器实验报告
} listModel.addElement(item); } save(listModel); } } else if (e.getSource() == itemExit) { //退出 System.exit(0); } else if (e.getSource() == itemAbout) { //关于 JOptionPane.showMessageDialog(frame, "作者:周琦"); } else if (e.getSource() == btnPlay) { //播放按钮 // play or pause play(); } else if (e.getSource() == btnPre) { //上一首 pre(); } else if (e.getSource() == btnNext) {// next music 下一首 next(); } else if (e.getSource() == itemSequence) { //顺序播放模式 mode = 0; } else if (e.getSource() == itemSingle) { //单曲播放模式 mode = 1; } else if (e.getSource() == itemRandom) { //随机播放模式 mode = 2; } // play control /** * * 播放 * * */ public void play() { if (btnPlay.getIcon() == iconPlay) { if (isPause) { player.start(); System.out.println("暂停结束"); isPause = false; } else { try { player = Manager.createPlayer(new MediaLocator("file:" + currentItem.getPath())); player.addControllerListener(this); // 提取媒体内容 player.prefetch(); } catch (NoPlayerException e1) {
java音乐播放器实验报告
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
btnPlay.setIcon(iconPause);
} else {
player.stop();
isPause = true;
System.out.println("暂停");
btnPlay.setIcon(iconPlay);
}
}
public void next() { //下一首
if (currentIndex == listModel.getSize() - 1) {
currentIndex = 0;
} else {
currentIndex++;
}
currentItem = (ListItem) listModel.get(currentIndex);
list.setSelectedIndex(currentIndex);
Point p = list.indexToLocation(currentIndex);
JScrollBar jScrollBar = listPane.getVerticalScrollBar();// 获得垂直转动条
jScrollBar.setValue(p.y);// 设置垂直转动条位置
btnPlay.setIcon(iconPlay);
if (player != null)
player.close();
isPause = false;
play();
}
public void rand() { //随机播放 自定义方法
list.setSelectedIndex((int) (Math.random() % (listModel.getSize() -
1)));
Point p = list.indexToLocation((int) (Math.random() % (listModel .getSize() - 1)));
JScrollBar jScrollBar = listPane.getVerticalScrollBar();
jScrollBar.setValue(p.y);
btnPlay.setIcon(iconPlay);
if (player != null)
player.close();
isPause = false;
java音乐播放器实验报告
play();
}
public void pre() { //上一首 自定义方法
if (currentIndex == 0) {
currentIndex = listModel.getSize() - 1;
} else {
currentIndex--;
}
currentItem = (ListItem) listModel.get(currentIndex);
list.setSelectedIndex(currentIndex);
Point p = list.indexToLocation(currentIndex);
JScrollBar jScrollBar = listPane.getVerticalScrollBar();// 获得垂直转动条
jScrollBar.setValue(p.y);//设置垂直转动条位置
btnPlay.setIcon(iconPlay);
if (player != null) {
player.close();
}
isPause = false;
play();
}
// end play control
public DefaultListModel load(){ //创建并且设置列表数据模型 //自定义方法
File file = new File("list.lst");
DefaultListModel dlm = new DefaultListModel();
if (file.exists()) {
try {
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(file));
Integer size = (Integer) ois.readObject();
if (size != 0) {
for (int i = 0; i < size; i++) {
ListItem item = (ListItem) ois.readObject(); dlm.addElement(item);
}
}
ois.close();
return dlm;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
java音乐播放器实验报告
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return dlm;
}
public void save(DefaultListModel dlm) { //自定义的方法 try {
ObjectOutputStream oos = new ObjectOutputStream( 个输出流对象oos
new BufferedOutputStream(new
FileOutputStream("list.lst")));
Integer size = dlm.getSize();
oos.writeObject(size);
for (int i = 0; i < size; i++) {
ListItem item = (ListItem) dlm.get(i);
oos.writeObject(item);
}
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void controllerUpdate(ControllerEvent e) {
//ControllerListener接口的方法,用来判断以什么模式播放 if (e instanceof EndOfMediaEvent) {
if (mode == 0) {// 顺序播放
System.out.println("顺序播放");
next();
} else if (mode == 1) { // 单曲循环
System.out.println("播放结束");
player.setMediaTime(new Time(0));
System.out.println("单曲循环");
player.start();
} else if (mode == 2) {
System.out.println("随机播放");
rand();
}
return;
}
// 当提取媒体的内容结束 //定义了一
java音乐播放器实验报告
} } if (e instanceof PrefetchCompleteEvent) { System.out.println("开始播放"); player.start(); return; }
正在阅读:
1_Java课程设计源代码05-19
情境学习的理论与实践04-07
航运业碳排放研究报告 - 图文11-19
法语句型短语归纳07-17
心血管系统病理-广中医病理学教案12-24
怎么在QQ空间中发起投票02-10
例题与习题05-21
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 源代码
- 课程
- 设计
- Java
- 学年论文 红字 英语
- 西方文化概论复习题
- 江苏农村信用社考试真题由省联社委托专业机构统一命题
- 银川一中2012届高三理综化学第一次模拟考试
- 校学生会招新流程安排策划
- 【步步高】2014届高考数学一轮复习 1.2.4平面与平面的位置关系(二)备考练习 苏教版
- 74ls00 max232 89c51的引脚图
- 指路常用到的英语
- 第九章 细胞信号转导
- 那些年的版院记忆 - 再版
- 工程概预算实验心得
- 机关党建工作责任制
- 重要反复看---第一次成功发表文章的心得
- 新牛津版初中七年级-九年级Book B 词组【全6本书】
- 移动定位业务的市场前景及产业价值链
- 产品标识和可追溯性管理办法
- (电梯)MMC控制板ModBus通讯协议及安装要求_中文版- g
- A4纸打印版四线三格纸模板
- 六年级数学下册第一次月考考试题(真题)
- 小企业设立建账流程