注意:按钮图片和音频文件(*.wav)需要自己去网上下载替换(这里不方便上传),有什么问题,可以留言。。。
import java.applet.Applet; import java.applet.AudioClip; import java.awt.Color; import java.awt.Font; import java.awt.List; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.net.MalformedURLException; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class MusicPlayer extends JFrame { JLabel songNameLabel = null; // 用标签显示状态 // 四个播放功能键按钮 JButton btnLast = null; // 上一曲 JButton btnPlay = null; // 播放/停止 JButton btnNext = null; // 下一曲 JButton btnLoop = null; // 循环 // 显示歌曲列表 JLabel listLabel = null; List songsList = null; AudioClip[] songs;// 将音频文件放在数组当中 AudioClip currentSong;// 当前选定播放的音频文件 // 本例,此处把歌曲名写死了。同学们自己可以进行扩展:由用户从文件对话框动态加载 String[] strSongNames = { "song1.wav", "song2.wav", "song3.wav", "song4.wav", "song5.wav", "song6.wav" }; String strCurrentSongName; // 当前选定播放歌曲的名称 int index = 0; // 记录当前选定播放的歌曲的序号(当前播放的那首歌曲),默认第一首 boolean isPlayOrStop = true;// 记录播放状态(播放/停止),默认为播放 boolean isLoop = false; // 记录循环状态,默认为不循环播放 Thread playerThread; // 音频播放线程 public MusicPlayer() { super("音乐播放器"); this.setLayout(null); this.setBounds(300, 50, 310, 500); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 标签:我的音乐播放器/歌曲名 songNameLabel = new JLabel(); Font songNameFont = new Font("斜体", Font.ITALIC, 18); songNameLabel.setFont(songNameFont); songNameLabel.setText("我的音乐播放器"); songNameLabel.setBounds(10, 10, 300, 40); this.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("1.png")); btnPlay.setIcon(new ImageIcon("2.png")); btnNext.setIcon(new ImageIcon("3.png")); btnLoop.setIcon(new ImageIcon("4.png")); // 给按钮添加监听 MouseListener mlc = new MouseListenerC();// 鼠标监听器对象 btnLast.addMouseListener(mlc); btnPlay.addMouseListener(mlc); btnNext.addMouseListener(mlc); btnLoop.addMouseListener(mlc); // 添加到框架 getContentPane().add(btnLast); getContentPane().add(btnPlay); getContentPane().add(btnNext); getContentPane().add(btnLoop); // 以下这段设置歌曲播放列表 // 设置播放列表的标签 listLabel = new JLabel("播放列表"); listLabel.setBounds(10, 120, 100, 30); Font listLabelFont = new Font("宋体", Font.BOLD, 15); listLabel.setFont(listLabelFont); this.getContentPane().add(listLabel); // 设置播放列表控件 songsList = new List(); songsList.setBounds(10, 150, 250, 300); songsList.setBackground(Color.cyan); songs = new AudioClip[10]; // 把歌曲根据文件名逐个加载进来 for (int i = 0; i < strSongNames.length; i++) { songs[i] = loadSound(strSongNames[i]);// 加载音频文件 songsList.add(strSongNames[i]);// 将歌曲名称添加到列表中 } songsList.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { currentSong.stop(); index = songsList.getSelectedIndex(); playerThread = new Thread( new MusicRun() ); playerThread.start(); } }); this.getContentPane().add(songsList); playerThread = new Thread( new MusicRun() ); playerThread.start(); this.setVisible(true); } private class MusicRun implements Runnable { @Override public void run() { currentSong = songs[index]; if (isLoop) { currentSong.loop(); } strCurrentSongName = strSongNames[index]; songNameLabel.setText("正在播放:" + strCurrentSongName); songsList.select(index);// 在播放列表中选定当前播放歌曲条目 btnPlay.setIcon(new ImageIcon("5.png"));// 切换成“停止”图标 if (isPlayOrStop) { currentSong.play(); } } } private class MouseListenerC implements MouseListener { @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; isLoop = false; } else if (btn == btnNext) { index++; index = index % strSongNames.length; isPlayOrStop = true; isLoop = false; } else if (btn == btnLoop) { isLoop = !isLoop; } if (isPlayOrStop) { playerThread = new Thread(new MusicRun() ); playerThread.run(); } else { songNameLabel.setText("停止播放:" + strCurrentSongName); btnPlay.setIcon(new ImageIcon("2.png")); } } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } } public AudioClip loadSound(String filename) { URL url = null; try { url = new URL("file:" + filename); } catch (MalformedURLException e) { e.printStackTrace(); } return Applet.newAudioClip(url); } public static void main(String[] args) { MusicPlayer mp = new MusicPlayer(); } }
时间: 2024-11-04 05:35:09