首先來一張效果圖:

代碼如下:(主要實作界面操作,掃描檔案,播放音樂功能)
package musicplayer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javazoom.jl.player.Player;
public class MusicPlayer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
createUI();
}
private static void createUI() {
// TODO Auto-generated method stub
// 1. 建立一個頂層容器(視窗)
final JFrame jf = new JFrame("JXD音樂播放器(JAVA版)"); // 建立視窗
jf.setSize(500, 500); // 設定視窗大小
jf.setLocationRelativeTo(null); // 把視窗位置設定到螢幕中心
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 當點選視窗的關閉按鈕時退出程式(沒有這一句,程式不會退出)
// 2. 建立中間容器(面闆容器)
final JPanel panel = new JPanel(); // 建立面闆容器,使用預設的布局管理器
// 3. 建立一個基本元件(按鈕),并添加到 面闆容器 中
JButton btn = new JButton("選擇檔案");
panel.add(btn);
// 4. 把 面闆容器 作為視窗的内容面闆 設定到 視窗
jf.setContentPane(panel);
// 5. 顯示視窗,前面建立的資訊都在記憶體中,通過 jf.setVisible(true) 把記憶體中的視窗顯示在螢幕上。
jf.setVisible(true);
//btn的監聽點選事件
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//建立一個檔案選擇器
JFileChooser fd = new JFileChooser();
fd.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//檔案夾模式
fd.showOpenDialog(null);
File f = fd.getSelectedFile();
if(f != null){
//jf.dispose();//讓窗體消失
final ArrayList mp3List = new ArrayList();
f.listFiles(new FileFilter() {
public boolean accept(File file) {
// TODO Auto-generated method stub
if(file.getName().endsWith(".mp3")){
mp3List.add(file);
// System.out.println("歌曲名稱為:"+file.getName());
}
return false;
}
});
JOptionPane.showMessageDialog(panel, "一共掃描到"+mp3List.size()+"首歌曲!", "掃描檔案夾",JOptionPane.WARNING_MESSAGE); //提示消息
DefaultListModel listModel1 = new DefaultListModel();
for(int i=0;i<mp3List.size();i++){
File mp3File = (File) mp3List.get(i);
listModel1.addElement(mp3File.getName());
}
JList jList1 = new JList(listModel1);
JScrollPane js = new JScrollPane(jList1);
//js.setBounds(50, 150, 800, 800);
panel.add(js);
// panel.revalidate();
jf.setContentPane(panel);
// 5. 顯示視窗,前面建立的資訊都在記憶體中,通過 jf.setVisible(true) 把記憶體中的視窗顯示在螢幕上。
jf.setVisible(true);
jList1.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
System.out.println("============ "+e.getLastIndex()+" "+e.getValueIsAdjusting());
if(e.getValueIsAdjusting()){
FileInputStream fis;
try {
fis = new FileInputStream((File) mp3List.get(e.getLastIndex()));
BufferedInputStream stream=new BufferedInputStream(fis);
Player player=new Player(stream);
player.play();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
}
}
});
}
}
關注公衆号 随時随地檢視分享的文章哦,一起學習,一起進步