java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例
更新時(shí)間:2017年09月21日 15:32:42 作者:海那邊的小萌男
這篇文章主要介紹了java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
java 實(shí)現(xiàn)音樂播放器的簡單實(shí)例
實(shí)現(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)的標(biāo)簽 JLabel songNameLabel = null; //四個(gè)播放功能鍵按鈕 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; //當(dāng)前歌曲在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)的標(biāo)簽 songNameLabel = new JLabel(); Font songNameFont = new Font("黑體",Font.ITALIC,18); songNameLabel.setFont(songNameFont); songNameLabel.setText("我的音樂播放器"); songNameLabel.setBounds(10, 10, 300, 40); getContentPane().add(songNameLabel); //四個(gè)播放功能鍵按鈕 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); //歌曲列表的標(biāo)題 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); //把所有歌曲名逐個(gè)添加到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); //把所有歌曲名逐個(gè)添加到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ù)實(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(); } }); //單開一個(gè)線程,專用于播放音樂 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(); } //在播放列表中選定當(dāng)前歌曲 songsList.setSelectedIndex(index); //把播放按鈕的圖標(biāo)切換成“停止” 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ù)詳細(xì)代碼
這篇文章主要介紹了Java編程文件遍歷之指定遍歷的層數(shù)詳細(xì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12java 數(shù)據(jù)結(jié)構(gòu) 冒泡排序?qū)崿F(xiàn)代碼
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu) 冒泡排序的相關(guān)資料,并附實(shí)例代碼,有需要的小伙伴可以參考下2016-09-09使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法
這篇將介紹使用Post方式提交數(shù)據(jù)到服務(wù)器,由于Post的方式和Get方式創(chuàng)建Web工程是一模一樣的,只用幾個(gè)地方的代碼不同,這篇文章主要介紹了使用Post方式提交數(shù)據(jù)到Tomcat服務(wù)器的方法,感興趣的朋友一起學(xué)習(xí)吧2016-04-04