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

java 實(shí)現(xiàn)音樂(lè)播放器的簡(jiǎn)單實(shí)例

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

java 實(shí)現(xiàn)音樂(lè)播放器的簡(jiǎ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中的位置(序號(hào))
  //歌曲文件名數(shù)組---String
  String[] strSongNames={ "song1.wav","song2.wav","song3.wav","song4.wav","song5.wav","song6.wav" };
  final String DIR="songs\\";

  //播放音樂(lè)的線程
  Thread playerThread=null;
  boolean isPlayOrStop = true;//true代表播放狀態(tài)
  boolean isLoop = false; //是否為循環(huán)狀態(tài)

  public MusicPlayer() {
    super("音樂(lè)播放器");
    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("我的音樂(lè)播放器");
    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)聽(tīng)
    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);

    //對(duì)JList控件的監(jiān)聽(tīng)技術(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();
      }
    });


    //單開(kāi)一個(gè)線程,專用于播放音樂(lè)
    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;
  }


  //講解音樂(lè)播放的基本技術(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();
  }

}

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望通過(guò)本文能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

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

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

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

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

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

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

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

    詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證

    本篇文章主要介紹了詳解使用Spring Security進(jìn)行自動(dòng)登錄驗(yàn)證,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Java中Calendar類的一些常用方法小結(jié)

    Java中Calendar類的一些常用方法小結(jié)

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

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

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

    TK-MyBatis 分頁(yè)查詢的具體使用

    分頁(yè)查詢?cè)诤芏嗟胤蕉伎梢允褂玫?,本文就詳?xì)的介紹了一下TK-MyBatis 分頁(yè)查詢的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁(yè)效果(實(shí)例代碼)

    Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁(yè)效果(實(shí)例代碼)

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

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

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

    Java使用junit框架進(jìn)行代碼測(cè)試過(guò)程詳解

    單元測(cè)試就是針對(duì)最小的功能單元編寫(xiě)測(cè)試代碼,Junit是使用Java語(yǔ)言實(shí)現(xiàn)的單元測(cè)試框架,它是開(kāi)源的,Java開(kāi)發(fā)者都應(yīng)當(dāng)學(xué)習(xí)并使用Junit編寫(xiě)單元測(cè)試。本文就來(lái)講講Junit框架的使用教程,需要的可以參考一下
    2023-02-02

最新評(píng)論

丰城市| 镇平县| 民勤县| 宜章县| 海南省| 黔西县| 上杭县| 城固县| 靖州| 长岭县| 获嘉县| 南靖县| 黔江区| 丰顺县| 兴国县| 仪征市| 东至县| 大厂| 九台市| 靖边县| 郎溪县| 新和县| 华安县| 盐源县| 冀州市| 禹城市| 秦安县| 舒兰市| 文昌市| 汾西县| 东乡县| 清镇市| 商南县| 化隆| 卢湾区| 汕尾市| 旬邑县| 镇赉县| 阿坝县| 阿合奇县| 英山县|