java 實現(xiàn)音樂播放器的簡單實例
更新時間:2017年09月21日 15:32:42 作者:海那邊的小萌男
這篇文章主要介紹了java 實現(xiàn)音樂播放器的簡單實例的相關(guān)資料,希望通過本文能幫助到大家,實現(xiàn)這樣的功能,需要的朋友可以參考下
java 實現(xiàn)音樂播放器的簡單實例
實現(xiàn)效果圖:

代碼如下
package cn.hncu.games;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.net.URL;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class MusicPlayer extends JFrame{
//顯示(歌曲名稱)播放狀態(tài)的標簽
JLabel songNameLabel = null;
//四個播放功能鍵按鈕
JButton btnLast = null; //上一曲
JButton btnPlay = null; //播放/停止
JButton btnNext = null; //下一曲
JButton btnLoop = null; //循環(huán)
//歌曲列表
JList songsList = null;
AudioClip songs[] = null;
AudioClip currentSong = null;
int index=0; //當前歌曲在JList中的位置(序號)
//歌曲文件名數(shù)組---String
String[] strSongNames={ "song1.wav","song2.wav","song3.wav","song4.wav","song5.wav","song6.wav" };
final String DIR="songs\\";
//播放音樂的線程
Thread playerThread=null;
boolean isPlayOrStop = true;//true代表播放狀態(tài)
boolean isLoop = false; //是否為循環(huán)狀態(tài)
public MusicPlayer() {
super("音樂播放器");
setBounds(300, 50, 310, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
//hello();
//顯示(歌曲名稱)播放狀態(tài)的標簽
songNameLabel = new JLabel();
Font songNameFont = new Font("黑體",Font.ITALIC,18);
songNameLabel.setFont(songNameFont);
songNameLabel.setText("我的音樂播放器");
songNameLabel.setBounds(10, 10, 300, 40);
getContentPane().add(songNameLabel);
//四個播放功能鍵按鈕
btnLast = new JButton();
btnPlay = new JButton();
btnNext = new JButton();
btnLoop = new JButton();
//位置大小
btnLast.setBounds(10, 70, 50, 40);
btnPlay.setBounds(70, 70, 50, 40);
btnNext.setBounds(130, 70, 50, 40);
btnLoop.setBounds(190, 70, 50, 40);
//設(shè)置圖片
btnLast.setIcon( new ImageIcon("images2/1.png"));
btnPlay.setIcon( new ImageIcon("images2/2.png"));
btnNext.setIcon( new ImageIcon("images2/3.png"));
btnLoop.setIcon( new ImageIcon("images2/4.png"));
//添加到框架
getContentPane().add(btnLast);
getContentPane().add(btnPlay);
getContentPane().add(btnNext);
getContentPane().add(btnLoop);
//添加監(jiān)聽
MyMouseListener mml = new MyMouseListener();
btnLast.addMouseListener(mml);
btnPlay.addMouseListener(mml);
btnNext.addMouseListener(mml);
btnLoop.addMouseListener(mml);
//歌曲列表的標題
JLabel listLabel = new JLabel("播放列表");
listLabel.setBounds(10, 120, 100, 30);
Font listLabelFont = new Font("黑體",Font.BOLD,16);
listLabel.setFont(listLabelFont);
getContentPane().add(listLabel);
//歌曲列表
/*
songsList = new JList();
songsList.setBounds(10, 150, 250, 300);
songsList.setBackground(Color.CYAN);
//把所有歌曲名逐個添加到List中
//songsList.setListData(strSongNames);
for(int i=0;i<strSongNames.length;i++){
DefaultListModel dm = (DefaultListModel)songsList.getModel();
dm.add(i,strSongNames[i]);
}
getContentPane().add(songsList);
*/
DefaultListModel lm = new DefaultListModel();
songsList = new JList(lm);
songsList.setBounds(10, 150, 250, 300);
songsList.setBackground(Color.CYAN);
//把所有歌曲名逐個添加到List中
//songsList.setListData(strSongNames);
songs = new AudioClip[strSongNames.length];
for(int i=0;i<strSongNames.length;i++){
lm.add(i,strSongNames[i]);
songs[i] = loadSound(strSongNames[i]);
}
getContentPane().add(songsList);
//lm.remove(3);
//對JList控件的監(jiān)聽技術(shù)實現(xiàn)
songsList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
currentSong.stop();
index = songsList.getSelectedIndex();
isPlayOrStop = true;
playerThread = new Thread( new MusicRun() );
playerThread.start();
}
});
//單開一個線程,專用于播放音樂
playerThread = new Thread( new MusicRun() );
playerThread.start();
setVisible(true);
}
private AudioClip loadSound(String fileName) {
try {
URL url = new URL("file:songs\\"+fileName);
AudioClip au = Applet.newAudioClip(url);
return au;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//講解音樂播放的基本技術(shù)
private void hello() {
try {
File f = new File("songs\\song1.wav");
URL url = f.toURI().toURL();
//URL url = new URL("file:songs\\song1.wav");
AudioClip au = Applet.newAudioClip(url);
au.play();
//au.loop();
//au.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
private class MyMouseListener extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e) {
JButton btn = (JButton) e.getSource();
currentSong.stop();
if(btn==btnPlay){
isPlayOrStop = !isPlayOrStop;
}else if(btn==btnLast){
index--;
if(index<0){
index = strSongNames.length-1;
}
//isPlayOrStop=true;
}else if(btn==btnNext){
index++;
index = index%strSongNames.length;
}else if(btn==btnLoop){
isLoop = !isLoop;
}
if(isPlayOrStop){//播放
playerThread = new Thread( new MusicRun() );
playerThread.start();
}else{//停止
songsList.setSelectedIndex(index);
songNameLabel.setText("停止播放:"+strSongNames[index]);
btnPlay.setIcon( new ImageIcon("images2/2.png"));
}
}
}
private class MusicRun implements Runnable{
@Override
public void run() {
currentSong = songs[index];
if(isLoop){
currentSong.loop();
songNameLabel.setText("循環(huán)播放:"+strSongNames[index]);
}
if (isPlayOrStop) {
currentSong.play();
}
//在播放列表中選定當前歌曲
songsList.setSelectedIndex(index);
//把播放按鈕的圖標切換成“停止”
btnPlay.setIcon( new ImageIcon("images2/5.png"));
if(!isLoop){
songNameLabel.setText("正在播放:"+strSongNames[index]);
}
}
}
public static void main(String[] args) {
new MusicPlayer();
}
}
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望通過本文能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
java 數(shù)據(jù)結(jié)構(gòu) 冒泡排序?qū)崿F(xiàn)代碼
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu) 冒泡排序的相關(guān)資料,并附實例代碼,有需要的小伙伴可以參考下2016-09-09
使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法
這篇將介紹使用Post方式提交數(shù)據(jù)到服務(wù)器,由于Post的方式和Get方式創(chuàng)建Web工程是一模一樣的,只用幾個地方的代碼不同,這篇文章主要介紹了使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法,感興趣的朋友一起學習吧2016-04-04

