Java编写音乐播放器
使用Jmf播放Mp3
窗体类:
package com.lc.player;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class WindowKit extends JFrame implements ActionListener,ControllerListener{
private JScrollPane scrollPane;
private JPanel jPanel;
private JButton btnNewButton;
private JButton btnNewButton_1;
private JButton button;
private JButton button_1;
private JButton btnNewButton_2;
private JLabel lblNewLabel;
JFileChooser jfc = new JFileChooser();
private JLabel label_1;
private JTextField textField;
private JButton button_2;
private MyPlayer player=new MyPlayer();
private File f ;
public WindowKit() {
setResizable(false);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 480, 380);
jPanel = new JPanel();
jPanel.setBounds(10, 10, 480, 380);
setContentPane(jPanel);
jPanel.setLayout(null);
btnNewButton = new JButton("添加歌曲文件夹");
btnNewButton.addActionListener(this);
btnNewButton.setBounds(22, 283, 123, 23);
jPanel.add(btnNewButton);
btnNewButton_1 = new JButton("清空列表");
btnNewButton_1.setBounds(22, 316, 123, 23);
jPanel.add(btnNewButton_1);
JLabel label = new JLabel("\u6B63\u5728\u64AD\u653E\uFF1A");
label.setBounds(170, 10, 81, 15);
jPanel.add(label);
lblNewLabel = new JLabel("");
lblNewLabel.setBounds(238, 35, 226, 23);
jPanel.add(lblNewLabel);
button = new JButton("\u6682\u505C/\u64AD\u653E");
button.setBounds(258, 283, 93, 23);
jPanel.add(button);
button_1 = new JButton("\u4E0A\u4E00\u66F2");
button_1.setBounds(155, 283, 93, 23);
jPanel.add(button_1);
btnNewButton_2 = new JButton("下一曲");
btnNewButton_2.setBounds(361, 283, 93, 23);
jPanel.add(btnNewButton_2);
label_1 = new JLabel("\u7F51\u7EDC\u5730\u5740\uFF1A");
label_1.setBounds(170, 181, 67, 15);
jPanel.add(label_1);
textField = new JTextField();
textField.setBounds(194, 206, 270, 21);
jPanel.add(textField);
textField.setColumns(10);
button_2 = new JButton("\u64AD\u653E");
button_2.setBounds(361, 237, 93, 23);
jPanel.add(button_2);
}
public void setAudioList(List audioList) {
DefaultListModel listModel = new DefaultListModel();
for (File file : audioList) {
listModel.addElement(file.getName());
}
JList list = new JList(listModel);
list.setBounds(10, 10, 380, 260);
list.addListSelectionListener (new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent event) {
String a=list.getSelectedValue();
System.out.println(a);
File mf=new File(f,a);
try {
player.start(mf.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
});
scrollPane = new JScrollPane(list);
scrollPane.setBounds(10, 10, 140, 260);
getContentPane().add(scrollPane);
}
@Override
public void actionPerformed(ActionEvent e) {
// btnNewButton; 添加歌曲文件
// btnNewButton_1; 清空列表
// button; 暂停播放
// button_1; 上一曲
// btnNewButton_2; 下一曲
// button_2 播放网络歌曲
if (e.getSource().equals(btnNewButton)) {// 判断触发方法的按钮是哪个
jfc.setFileSelectionMode(1);// 设定只能选择到文件夹
int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句
if (state == 1) {
return;
} else {
ArrayList audList=new ArrayList();
f= jfc.getSelectedFile();// f为选择到的目录
File[] audios = f.listFiles();
for (File file : audios) {
if (!file.isDirectory()) {
String name=file.getName();
if(name.contains(".mp3")||name.contains(".wav")||name.contains(".mid"))
audList.add(file);
}
}
this.setAudioList(audList);
}
}
if (e.getSource().equals(btnNewButton_1)) {
ArrayList audList=new ArrayList();
this.setAudioList(audList);
}
if (e.getSource().equals(button)) {
}
if (e.getSource().equals(button_1)) {
}
if (e.getSource().equals(btnNewButton_2)) {
}
if (e.getSource().equals(button_2)) {
URL url;
try {
url = new URL(textField.getText());
player.start(url);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
@Override
public void controllerUpdate(ControllerEvent arg0) {
// TODO Auto-generated method stub
}
}
播放类:
package com.lc.player;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.media.*;
public class MyPlayer {
private boolean playState;
private Player player;
public MyPlayer() {
super();
}
public boolean isPlaying() {
return playState;
}
public void start(URL url) {
try {
player = Manager.createPlayer(new MediaLocator(url));
playState=true;
} catch (NoPlayerException ex) {
ex.printStackTrace();
System.out.println("不能播放文件");
return;
} catch (IOException ex) {
ex.printStackTrace();
return;
}
if (player == null) {
System.out.println("播放器为空");
return;
}
player.prefetch();
}
public void stop()
{
if(isPlaying())
{
player.stop();
playState=false;
}
}
}