最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 實現(xiàn)音樂播放器的簡單實例

 更新時間:2017年09月21日 15:32:42   作者:海那邊的小萌男  
這篇文章主要介紹了java 實現(xià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);
    //設置圖片
    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)聽技術實現(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;
  }


  //講解音樂播放的基本技術
  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ū)交流討論,感謝閱讀,希望通過本文能幫助到大家,謝謝大家對本站的支持!

相關文章

  • 淺談synchronized加鎖this和class的區(qū)別

    淺談synchronized加鎖this和class的區(qū)別

    synchronized 是 Java 語言中處理并發(fā)問題的一種常用手段,本文主要介紹了synchronized加鎖this和class的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • Java 中的 @SneakyThrows 注解的使用方法(簡化異常處理的利與弊)

    Java 中的 @SneakyThrows 注解的使用方法(簡化異常處理的利與弊)

    @SneakyThrows是Lombok提供的一個注解,用于簡化Java方法中的異常處理,特別是對于檢查型異常,它允許方法拋出異常而不必顯式聲明或捕獲這些異常,本文介紹Java 中的 @SneakyThrows 注解的使用方法,感興趣的朋友一起看看吧
    2025-03-03
  • spring boot與redis 實現(xiàn)session共享教程

    spring boot與redis 實現(xiàn)session共享教程

    這篇文章主要介紹了spring boot與redis 實現(xiàn)session共享教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-04-04
  • 詳解使用Spring Security進行自動登錄驗證

    詳解使用Spring Security進行自動登錄驗證

    本篇文章主要介紹了詳解使用Spring Security進行自動登錄驗證,非常具有實用價值,需要的朋友可以參考下
    2017-09-09
  • Java中Calendar類的一些常用方法小結

    Java中Calendar類的一些常用方法小結

    項目當中,我們經常會涉及到對時間的處理,Date類最主要的作用就是獲得當前時間,同時這個類里面也具有設置時間以及一些其他的功能,但更推薦使用 Calendar 類進行時間和日期的處理,這篇文章主要給大家介紹了關于Java中Calendar類的一些常用方法,需要的朋友可以參考下
    2021-11-11
  • Spring Boot 微信小程序接入微信支付功能

    Spring Boot 微信小程序接入微信支付功能

    本文詳細介紹了使用SpringBoot框架接入微信支付的全流程,包括導入依賴、配置微信公眾號信息、設置配置文件、編寫支付相關實體類和API地址常量、實現(xiàn)支付服務以及Controller層的編寫,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • TK-MyBatis 分頁查詢的具體使用

    TK-MyBatis 分頁查詢的具體使用

    分頁查詢在很多地方都可以使用到,本文就詳細的介紹了一下TK-MyBatis 分頁查詢的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring Boot和Thymeleaf整合結合JPA實現(xiàn)分頁效果(實例代碼)

    Spring Boot和Thymeleaf整合結合JPA實現(xiàn)分頁效果(實例代碼)

    這篇文章主要介紹了Spring Boot和Thymeleaf整合結合JPA實現(xiàn)分頁效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Springboot中依賴注入的三種方式詳解

    Springboot中依賴注入的三種方式詳解

    這篇文章主要介紹了Springboot中依賴注入的三種方式詳解,Setter Injection需要依賴@Autowired注解,使用方式與Field Injection有所不同,Field Injection時@Autowired是用在成員變量上,需要的朋友可以參考下
    2023-09-09
  • Java使用junit框架進行代碼測試過程詳解

    Java使用junit框架進行代碼測試過程詳解

    單元測試就是針對最小的功能單元編寫測試代碼,Junit是使用Java語言實現(xiàn)的單元測試框架,它是開源的,Java開發(fā)者都應當學習并使用Junit編寫單元測試。本文就來講講Junit框架的使用教程,需要的可以參考一下
    2023-02-02

最新評論

舟曲县| 米泉市| 荃湾区| 新巴尔虎左旗| 太谷县| 武夷山市| 高雄县| 佛坪县| 佛坪县| 巴南区| 罗田县| 洪江市| 达拉特旗| 武川县| 固始县| 黄大仙区| 安阳县| 安龙县| 松阳县| 金平| 芜湖县| 阜城县| 四子王旗| 河西区| 珲春市| 疏勒县| 临桂县| 凌云县| 甘洛县| 吉木萨尔县| 会宁县| 东乌珠穆沁旗| 海伦市| 汕尾市| 天峨县| 滨州市| 铁岭市| 托克逊县| 琼结县| 南昌市| 肇东市|