1_Java课程设计源代码

更新时间:2023-05-19 23:16:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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; }

本文来源:https://www.bwwdw.com/article/s5q4.html

Top