Java图形用户界面设计音乐播放器


设计思路


音乐播放器的基础是可以播放音乐,所以要有一个实现播放音乐功能的类audioplay,图形界面就是通过动作调用audioplay里面的函数。关于实现播放器图形界面的步骤是,先设计好软件界面,再去添加监听器,实现播放,暂停,上一首,下一首,循环播放,导入音乐,播放音乐等功能。我参考的是QQ音乐的软件界面,实现音乐播放的基本功能,并添加新功能。
实现界面:

实现步骤

- 设计一个完整的播放器界面,并添加按钮响应

播放器界面的背景用的是QQ音乐的背景

需要的控件有

为了方便设计,不断测试得到界面的参数

在init()函数中通过不断调整位置设计图形基本界面

添加按钮响应主要重写两个接口:

  • 第一个接口 actionPerform()即动作触发接口实现按钮相应的:
  1. 打开音乐文件
  2. 播放该音乐
  3. 点击播放音乐
  4. 是否显示音乐列表
  5. 播放下一首
  6. 播放上一首
  7. 设置播放方式(0->循环播放 1->顺序播放 2->随机播放)
  • 第二个接口是mouseClicked鼠标点击触发事件实现点击音乐播放列表两次播放音乐。
    文件框架采用音乐,图片分开放置。
  • 实现歌词根据歌曲内容逐句提醒
    实现该功能的基本思路是扫描一遍歌词,如果当前时间是在该歌词的播放时间,则该歌词为当前歌词,设置当前歌词高亮。对于时间段的控制,我用一个数组存储断点时间。

    Breaktime存储每句歌词的开始时间,结束时间为下一句歌词的开始时间-1,通过循环遍历整个歌词,并高亮加粗当前歌词。对于越界处理,即歌词太长,歌词框显示不完,我采用的是判断当前是否越界,越界多少行,前面多少行就不显示。
  • 实现进度条根据歌曲播放时间移动
    由于我的软件界面大小和QQ音乐一个大小,所以我的进度条的图片采用的是QQ音乐播放完的进度条截屏。


    位置在起点为(0,height-77)宽度为width高度为3。需要根据音乐的时长和当前播放时间更新它的长度。

    长度为已播放时间占总时间的比例乘以进度条长度。
  • 导入一个gif动画图片

模仿QQ音乐的方式,左边显示的是图片,所以gif我添加的是下面的波形效果,用GIF录制软件,录制了一段波形图,放在了进度条上面。


同样,左边的音乐播放图片是随机切换的。我在时间计数器里设置10s参数一个1-10的随机数,对应的是10张图片,选中一个图片更换原来图片。

  • 歌曲列表右侧添加歌曲时间的列
    导入音乐的时候,计算出播放的时间,并在时间列表添加该值。
    音乐播放时间的控件位置

    导入歌曲的方式是将音乐歌曲名存放在

    每次添加音乐时,会检查有没有该音乐,若没有则添加到列表,计算时间,有该音乐则不会添加。

    时间的计算方式为
  • 进度条附件添加一个当前播放时间的显示
    当前时间的控件,它是一个动态显示的控件,在时间计数器中需要更新它。

    计算时间:分钟为秒数/60,秒钟为秒数%60.
  • 双击列表播放该歌曲
    用JList存储歌曲并添加监听器
    当点击两次后,触发音乐列表动作
    首先,检查播放列表是否有音乐,vt为存放歌曲的向量,如果不为空则有歌曲,否则没有,如果选中了则设置播放路径为选中的路径,如果没有选中则选中第一个,然后再播放音乐。
  1. 播放暂停
    当播放的时候按下暂停键会停止播放,图标会转换为播放键。

  2. 播放方式


分别代表随机,循环,顺序播放

按下按键会转换图标,并切换播放方式。

当播放歌曲播放结束后,会根据播放方式标志flagway来决定播放方式。循环播放为重新播放该歌曲,顺序播放,获得该歌曲的位置后,通过循环队列获得下一个歌曲的歌名并播放。随机播放通过随机函数选中一个不同的音乐。
3. 歌曲上一首下一首功能
先获得当前播放歌曲的位置,通过循环队列的方式,获得上一个下一个歌曲的歌曲名,并播放。

源代码:


import java.applet.Applet;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;
import java.io.*;
import javax.swing.text.*;
import javax.swing.text.StyleContext.NamedStyle;
import javax.swing.*;import static javax.swing.JFrame.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.util.*;
import java.util.Timer;/*音乐播放器类
*/
class audioplay{AudioClip adc;URL url;boolean adcFlag=false;//文件标志boolean playFlag=false;//播放标志void SetPlayAudioPath(String path){//设置路径try{url = new URL(path);if(adcFlag==true){adc.stop();playFlag=false;}adc = Applet.newAudioClip(url);adcFlag=true;}catch (MalformedURLException e1) {e1.printStackTrace();}}void play(){    //播放音乐adc.play();playFlag=true;}void stop(){     //暂停音乐adc.stop();playFlag=false;}
}/*图像界面类*/
class MyExtendsJFrame extends JFrame implements ActionListener,MouseListener{//参数final int width = 1280;//界面宽度1280final int height = 836;//界面高度836final int tool_width = 42;//图标大小//工作成员audioplay audioPlay;//音乐播放器Timer nTimer;//定时器String MusicName;//音乐名String playFile;//文件路径String playFileName;//文件名String playFileDirectory;//文件的具体目录int MusicTime;//当前时间Vector vt = new Vector();//播放队列Vector vtime = new Vector();//时间队列int flagway = 0;//播放方式 0->循环播放 1->顺序播放 2->随机播放 //控件JLabel background;//背景JButton buttonPlay;//播放按钮JButton buttonOpenFile;//打开文件按钮JTextPane textLyrics;//歌词JLabel playTime;//进度条JList listPlayFile;//播放列表JButton buttonNext;//下一首JButton buttonPre;//上一首JLabel backgroundPlay;//播放图片JTextArea textMusic;//音乐名JList listPlayFileTime;//音乐播放时间JButton buttonShowList;//播放列表JTextArea musictitle;//歌曲名JButton buttonWay;//播放方式JTextArea TimeCount;//显示当前播放时间JLabel gifwave;//动态波形JLabel giflight;//动态荧光棒/*歌词*///飘洋过海String[] sLyrics1 = {//{4,7,10,12,16,22,26,29,31,35,39,42,48,52}"记忆它总是慢慢的累积\n",//4"在我心中无法抹去\n",//7"为了你的承诺\n",    //10"我在最绝望的时候\n",//12"都忍着不哭泣\n",//16"陌生的城市啊\n",//22"熟悉的角落里\n",//26"也曾彼此安慰\n",//29"也曾相拥叹息\n",//31"不管将会面对什么样的结局\n",//35"在漫天风沙里望着你远去\n",//39"我竟悲伤得不能自己\n",//42"多盼能送君千里\n",//45"直到山穷水尽\n",//48"一生和你相依"//52};//山外小楼夜听雨String[] sLyrics2 = {"芙蓉花又栖满了枝头 \n","亲何蝶雅留\n","票白如江水向东流入\n" ,"望断门前隔岸的杨柳 \n","寂寞仍不休\n","我无言让眼泪长流\n","我独酌山外小阁楼\n","听一夜相思愁\n","醉后让人烦忧心事雅收\n","山外小阁楼我乘一叶小舟\n","放思念随风漂流\n","我独坐山外小阁楼\n" ,"窗外渔火如豆\n","江畔晚风拂柳诉尽离愁\n","当月色暖小楼是谁又在弹奏\n","那一曲思念常留\n"};//我和我的祖国String[] sLyrics3 = {//{1,6,10,15,19,24,28,32,50,59}"我和我的祖国\n","一刻也不能分割\n","无论我走到哪里\n","都流出一首赞歌\n","我歌唱每一座高山\n","我歌唱每一条河\n","袅袅炊烟,小小村落\n","路上一道辙\n","你用你那母亲的脉搏和我诉说\n"};/*初始化界面*/public MyExtendsJFrame(){audioPlay=new audioplay();  //音乐播放对象setTitle("星星播放器");setBounds(160,100,1300,880);//setBounds(160,100,1300,880);setLayout(null);//排版方式init();   //初始化      setVisible(true);//设置界面可见setDefaultCloseOperation(EXIT_ON_CLOSE);//默认退出方式}void init(){//界面的初始化       /*界面背景设置*/Icon img=new ImageIcon(".//Imag//background.jpg");//界面背景background = new JLabel(img);background.setBounds(0,0,width,height);//设置位置getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));//设为最底层((JPanel)getContentPane()).setOpaque(false); //控件透明/*播放按钮设置*/buttonPlay=new JButton();//播放按钮buttonPlay.setBounds(width/2-tool_width/2,height-tool_width - 10,tool_width,tool_width); //设置位置Icon icon=new ImageIcon(".//Imag//play.jpg");//设置图标buttonPlay.setIcon(icon);       buttonPlay.setBorderPainted(false);//消隐buttonPlay.addActionListener(this);//添加监听器add(buttonPlay);/*下一首按钮*/buttonNext = new JButton("");//下一首按钮buttonNext.setBounds(width/2-tool_width/2+47, height-tool_width - 10, tool_width, tool_width);icon = new ImageIcon(".//Imag//next.jpg");buttonNext.setIcon(icon);buttonNext.setBorderPainted(false);//消隐buttonNext.addActionListener(this);add(buttonNext);/*上一首按钮*/buttonPre = new JButton("");buttonPre.setBounds(width/2-tool_width/2-40, height-tool_width - 12, tool_width-3, tool_width-3);icon = new ImageIcon(".//Imag//pre.jpg");buttonPre.setIcon(icon);buttonPre.setBorderPainted(false);//消隐buttonPre.addActionListener(this);add(buttonPre);/*播放方式按钮*/buttonWay = new JButton("");buttonWay.setBounds(width/2-tool_width/2-90, height-tool_width - 10, tool_width-10, tool_width-10);icon = new ImageIcon(".//Imag//loop.jpg");buttonWay.setIcon(icon);buttonWay.setBorderPainted(false);//消隐buttonWay.addActionListener(this);add(buttonWay);/*文件打开按钮*/buttonOpenFile=new JButton("");//打开按钮buttonOpenFile.setBounds(width-95,height-50,tool_width-10,tool_width-10); //设置位置icon=new ImageIcon(".//Imag//open.jpg"); //图标buttonOpenFile.setIcon(icon);    buttonOpenFile.setBorderPainted(false);//消隐buttonOpenFile.addActionListener(this);//添加监听器add(buttonOpenFile);/*音乐播放背景*/icon = new ImageIcon(".//Imag//1.jpg");backgroundPlay = new JLabel(icon);backgroundPlay.setBounds(100, 120, 450, 450);getLayeredPane().add(backgroundPlay);//backgroundPlay.addMouseListener(this);//添加监听器/*动态的GIF波形*/icon = new ImageIcon(".//Imag//wave.gif");gifwave = new JLabel(icon);gifwave.setBounds(-10,height-133,width-20,50);       //设置大小add(gifwave);gifwave.setVisible(true);/*时间条*/icon=new ImageIcon(".//Imag//time.jpg");     //时间条playTime = new JLabel(icon);       playTime.setBounds(0,height-77,width,3);        //设置大小add(playTime);/*设置时间显示*/TimeCount = new JTextArea("00:00");TimeCount.setBounds(width/2-350,height-45,80,20);TimeCount.setForeground(Color.white);TimeCount.setFont(new Font("楷体",1,20));TimeCount.setOpaque(false);add(TimeCount);//添加时间计数监听器/*音乐列表按钮*/buttonShowList = new JButton("");buttonShowList.setBounds(width-60,height-50,tool_width-10,tool_width-10);buttonShowList.setIcon(new ImageIcon(".//Imag//list.jpg"));buttonShowList.setBorderPainted(false);//消隐buttonShowList.addActionListener(this);add(buttonShowList);/*歌词*/textLyrics=new JTextPane();   //歌词textLyrics.setBounds(width/2+300,height/2-200,250,300);//设置位置textLyrics.setForeground(Color.white);//前置颜色textLyrics.setOpaque(false);add(textLyrics);   textLyrics.setText("这是歌词");//歌词内容textLyrics.setFont(new Font("楷体",1,20));/*歌名*/musictitle = new JTextArea("歌名");musictitle.setBounds(width/2+300,height/2-200-50,300,100);musictitle.setForeground(Color.white);musictitle.setOpaque(false);musictitle.setFont(new Font("楷体",1,30));add(musictitle);/*音乐列表*/listPlayFile=new JList();      //音乐列表listPlayFile.setBounds(width-300,height-300,200,150); //设置位置listPlayFile.setOpaque(false);listPlayFile.setFont(new Font("楷体",1,20));listPlayFile.setBackground(new Color(0, 0, 0, 0));//设置背景listPlayFile.setForeground(Color.white);add(listPlayFile);    listPlayFile.addMouseListener(this);//添加监听器/*音乐播放时间*/listPlayFileTime = new JList();listPlayFileTime.setBounds(width-300+200,height-300,150,150);listPlayFileTime.setOpaque(false);listPlayFileTime.setFont(new Font("楷体",1,20));listPlayFileTime.setBackground(new Color(0, 0, 0, 0));listPlayFileTime.setForeground(Color.white);add(listPlayFileTime);}/*时间计数器*/public void timerFun(int musicTime){MusicTime = musicTime;//当前音乐播放需要的时间if (nTimer != null) {//计数器如果在走则停下来nTimer.cancel();}//重新创建一个时间对象nTimer = new Timer();nTimer.schedule(new TimerTask()//内部类{int PlayTime = 0;public void run()//时间走{PlayTime ++;//+1sif (PlayTime >= MusicTime) {//播放结束nTimer.cancel();//int flagway = 0;//播放方式 0->循环播放 1->顺序播放 2->随机播放 if(flagway==0&&vt.size()!=0){//0->循环播放audioPlay.play();timerFun(MusicTime);}else if(flagway==1&&vt.size()!=0){//1->顺序播放int position = vt.lastIndexOf(playFileName);position = (position+1)%(vt.size());//通过取余获得下一个音乐的位置playFileName=(String)vt.get(position);playFile = playFileDirectory + playFileName;audioPlay.SetPlayAudioPath("file:" + playFile);//设置播放路径audioPlay.play();//播放下一首音乐File file = new File(playFile);int nMusicTime = (int)file.length() / 1024 / 173;//文件播放需要的时间timerFun(nMusicTime);}else if(flagway==2){int position = vt.lastIndexOf(playFileName);int choose = 0;do{//随机选中一个不同的音乐choose = (int)(Math.random() * vt.size());}while(position==choose);playFileName=(String)vt.get(choose);playFile = playFileDirectory + playFileName;audioPlay.SetPlayAudioPath("file:" + playFile);//设置播放路径audioPlay.play();//播放下一首音乐File file = new File(playFile);int nMusicTime = (int)file.length() / 1024 / 173;//文件播放需要的时间timerFun(nMusicTime);}}/*更换音乐播放图片(随机)*/final int N = 10;//10张背景图if(PlayTime%6==0){int choose = (int)(Math.random()*N)+1;Icon picture = new ImageIcon(".//Imag//"+choose+".jpg");backgroundPlay.setIcon(picture);System.out.println("选择图片"+choose);}/*显示当前播放时间*/int Second = PlayTime % 60;//秒int Minute = PlayTime / 60;//分钟String sSecond = "";//秒钟字符串String sMinute = "";//分钟字符串if (Second < 10) {//低于2位添加0sSecond = "0" + Second;}else{sSecond = "" + Second;}if (Minute < 10) {//低于2位添加0sMinute = "0" + Minute;}else{sMinute = "" + Minute;}String sPlayTime = sMinute + ":" + sSecond;System.out.println(sPlayTime);TimeCount.setText(sPlayTime);//更新当前播放时间playTime.setBounds(50,height-77, width * PlayTime / MusicTime , 3);/*歌词显示*/textLyrics.setText("");//歌词清空//确定是哪个台词//1->飘洋过海 2->山外小楼夜听雨 3->我和我的祖国int flag = 0;if(playFileName.equals("飘洋过海.wav")){flag = 1;System.out.println("播放飘洋过海歌词");}else if(playFileName.equals("山外小楼夜听雨.wav")){flag = 2;System.out.println("播放山外小楼夜听雨歌词");}else if(playFileName.equals("我和我的祖国.wav")){flag = 3;System.out.println("播放我和我的祖国歌词");}//逐行扫描歌曲,对应时间段的歌词高亮if(flag == 1){//飘洋过海int []breaktime = {1,5,8,11,13,17,23,27,30,32,36,40,43,45,49,53};final int MAX = 12;//最多显示12行//确定时间段int position = 0;for (int i = 0; i < sLyrics1.length; i++){for(position = 0;position <sLyrics1.length-1 ;position++){if(PlayTime<breaktime[0]){break;}if(PlayTime>=breaktime[position]&&PlayTime<=breaktime[position+1]-1){break;}}System.out.println("当前播放位置"+position);SimpleAttributeSet attrSet = new SimpleAttributeSet();StyleConstants.setFontFamily(attrSet, "隶书");StyleConstants.setFontSize(attrSet,20);int over =  position-MAX;//越过的歌词System.out.println("越界"+over);try{Document doc = MyExtendsJFrame.this.textLyrics.getDocument();//获得歌词内容StyleConstants.setForeground(attrSet, Color.yellow);//当前歌词高亮StyleConstants.setBold(attrSet, true);//加粗if(PlayTime>=breaktime[i]&&PlayTime<=breaktime[i+1]-1){doc.insertString(doc.getLength(), sLyrics1[i], attrSet);//当前歌词高亮System.out.println(sLyrics1[i]);}else{//不在当前歌词普通显示StyleConstants.setForeground(attrSet, Color.white);StyleConstants.setBold(attrSet, false);if(over>=0&&i-over<=0){//越界continue;}doc.insertString(doc.getLength(), sLyrics1[i], attrSet);}}catch (BadLocationException localBadLocationException) {}}}else if(flag == 2){//山外小楼夜听雨//设置断点int []breaktime = {17,21,25,30,35,39,44,49,53,59,66,72,76,81,87,94,100};final int MAX = 12;//最多显示12行//确定时间段int position = 0;for (int i = 0; i < sLyrics2.length; i++){for(position = 0;position <sLyrics2.length-1 ;position++){if(PlayTime<breaktime[0]){break;}if(PlayTime>=breaktime[position]&&PlayTime<=breaktime[position+1]-1){break;}}System.out.println("当前播放位置"+position);SimpleAttributeSet attrSet = new SimpleAttributeSet();StyleConstants.setFontFamily(attrSet, "隶书");StyleConstants.setFontSize(attrSet,20);int over =  position-MAX;//越过的歌词System.out.println("越界"+over);try{Document doc = MyExtendsJFrame.this.textLyrics.getDocument();//获得歌词内容StyleConstants.setForeground(attrSet, Color.yellow);//当前歌词高亮StyleConstants.setBold(attrSet, true);//加粗if(PlayTime>=breaktime[i]&&PlayTime<=breaktime[i+1]-1){doc.insertString(doc.getLength(), sLyrics2[i], attrSet);//当前歌词高亮System.out.println(sLyrics2[i]);}else{//不在当前歌词普通显示StyleConstants.setForeground(attrSet, Color.white);StyleConstants.setBold(attrSet, false);if(over>=0&&i-over<=0){//越界continue;}doc.insertString(doc.getLength(), sLyrics2[i], attrSet);}}catch (BadLocationException localBadLocationException) {}}}else if(flag == 3){//我和我的祖国int []breaktime = {1,6,10,15,19,24,28,32,50,59};final int MAX = 12;//最多显示12行//确定时间段int position = 0;for (int i = 0; i < sLyrics3.length; i++){for(position = 0;position <sLyrics3.length-1 ;position++){if(PlayTime<breaktime[0]){break;}if(PlayTime>=breaktime[position]&&PlayTime<=breaktime[position+1]-1){break;}}System.out.println("当前播放位置"+position);SimpleAttributeSet attrSet = new SimpleAttributeSet();StyleConstants.setFontFamily(attrSet, "隶书");StyleConstants.setFontSize(attrSet,20);int over =  position-MAX;//越过的歌词System.out.println("越界"+over);try{Document doc = MyExtendsJFrame.this.textLyrics.getDocument();//获得歌词内容StyleConstants.setForeground(attrSet, Color.yellow);//当前歌词高亮StyleConstants.setBold(attrSet, true);//加粗if(PlayTime>=breaktime[i]&&PlayTime<=breaktime[i+1]-1){doc.insertString(doc.getLength(), sLyrics3[i], attrSet);//当前歌词高亮System.out.println(sLyrics3[i]);}else{//不在当前歌词普通显示StyleConstants.setForeground(attrSet, Color.white);StyleConstants.setBold(attrSet, false);if(over>=0&&i-over<=0){//越界continue;}doc.insertString(doc.getLength(), sLyrics3[i], attrSet);}}catch (BadLocationException localBadLocationException) {}}}}}, 0L, 1000L);}/*重写监听器*/@SuppressWarnings("unchecked")//忽略警告/*鼠标按下动作*/public void actionPerformed(ActionEvent e){   /*打开音乐文件*/if (e.getSource() == buttonOpenFile){FileDialog openFile = new FileDialog(this, "音乐文件夹");//文件夹窗体openFile.setVisible(true);//设为可见if(openFile.getFile()!=null){//有选中的playFileName = openFile.getFile();//获得选中的文件名(我和我的祖国.wav)}else{//没有选中的,直接退出return;}System.out.println(playFileName);this.playFileDirectory = openFile.getDirectory();//文件的具体目录C:\Users\LittleStar\Desktop\音乐播发器\Music\System.out.println(playFileDirectory);playFile = playFileDirectory + playFileName;//目录+文件名=指定文件audioPlay.SetPlayAudioPath("file:" + playFile);//设置播放路径audioPlay.stop();//暂停当前播放//播放需要的时间File file = new File(playFile);int iMusicTime = (int)file.length() / 1024 / 173;int iSecond = iMusicTime % 60;int iMinute = iMusicTime / 60;if(!vt.contains(playFileName)){//如果该音乐不在目录vt.add(playFileName);System.out.println("添加音乐"+playFileName);listPlayFile.setListData(vt);//将播放列表更新  vtime.add(iMinute + ":" + iSecond);listPlayFileTime.setListData(vtime);}/*播放该音乐*/audioPlay.SetPlayAudioPath("file:" + this.playFile);audioPlay.play();musictitle.setText(this.playFileName);Icon icon = new ImageIcon(".//Imag//stop.jpg");//将按钮改为暂停buttonPlay.setIcon(icon);backgroundPlay.setVisible(true);int nMusicTime = (int)file.length() / 1024 / 173;//计算播放时间timerFun(nMusicTime);//启动时间            }/*点击播放音乐*/if (e.getSource() == buttonPlay) {if (!audioPlay.playFlag)//如果当前没有播放{if(vt.size()!=0){//播放播放队列不为空if(listPlayFile.getSelectedValue() != null){//如果列表音乐有选中的playFile = playFileDirectory + listPlayFile.getSelectedValue().toString();//设置播放音乐为选中的音乐}else{//没有选中的playFile = playFileDirectory + listPlayFile.getModel().getElementAt(0).toString();//选中第一首音乐listPlayFile.setSelectedIndex(0);//第一首音乐选中}audioPlay.stop();//关闭之前的audioPlay.SetPlayAudioPath("file:" + playFile);//设置当前播放路径audioPlay.play();//播放Icon icon = new ImageIcon(".//Imag//stop.jpg");buttonPlay.setIcon(icon);backgroundPlay.setVisible(true);File file = new File(this.playFile);int nMusicTime = (int)file.length() / 1024 / 173;timerFun(nMusicTime);}else{//当前播放队列为空System.out.println("没有音乐可以播放");}}else//当前为音乐播放状态转为暂停{audioPlay.stop();nTimer.cancel();Icon icon = new ImageIcon(".//Imag//play.jpg");this.buttonPlay.setIcon(icon);this.backgroundPlay.setVisible(false);//this.nTimer.cancel();}}/*是否显示音乐列表*/if(e.getSource() == buttonShowList){System.out.println("是否显示音乐列表");if (listPlayFile.isVisible()){System.out.println("关闭音乐列表");listPlayFile.setVisible(false);listPlayFileTime.setVisible(false);}else{System.out.println("显示音乐列表");listPlayFile.setVisible(true);listPlayFileTime.setVisible(true);}}/*播放下一首*/if(e.getSource() == buttonNext){if(vt.size()!=0){//寻找当前播放的位置int position = vt.lastIndexOf(playFileName);//System.out.println("当前位置"+position+"当前音乐数量"+vt.size());position = (position+1)%(vt.size());//通过取余获得下一个音乐的位置//System.out.println("当前位置"+position+"当前音乐数量"+vt.size());//System.out.println(vt.get(position));playFileName=(String)vt.get(position);playFile = playFileDirectory + playFileName;musictitle.setText(playFileName);audioPlay.SetPlayAudioPath("file:" + playFile);//设置播放路径audioPlay.play();//播放下一首音乐File file = new File(playFile);int nMusicTime = (int)file.length() / 1024 / 173;//文件播放需要的时间timerFun(nMusicTime);}else{System.out.println("没有音乐可以播放");}}/*播放上一首*/if(e.getSource() == buttonPre){if(vt.size()!=0){//寻找当前播放的位置int position = vt.lastIndexOf(playFileName);position = (vt.size()+position-1)%(vt.size());//通过取余获得下一个音乐的位置System.out.println("当前位置"+position+"当前音乐数量"+vt.size());System.out.println(vt.get(position));playFileName=(String)vt.get(position);playFile = playFileDirectory + playFileName;musictitle.setText(playFileName);audioPlay.SetPlayAudioPath("file:" + playFile);//设置播放路径audioPlay.play();//播放下一首音乐File file = new File(playFile);int nMusicTime = (int)file.length() / 1024 / 173;//文件播放需要的时间timerFun(nMusicTime);}else{System.out.println("没有音乐可以播放");}}/*设置播放方式*/if(e.getSource()==buttonWay){//0->循环播放 1->顺序播放 2->随机播放 if(flagway==0){//循环播放切换到顺序播放flagway = 1;System.out.println("顺序播放");Icon icon = new ImageIcon(".//Imag//unloop.jpg");buttonWay.setIcon(icon);}else if(flagway == 1){//顺序播放切换到随机播放 flagway = 2;System.out.println("随机播放");Icon icon = new ImageIcon(".//Imag//rand.jpg");buttonWay.setIcon(icon);}else if(flagway == 2){//随机播放切换到循环播放 flagway = 0;System.out.println("循环播放");Icon icon = new ImageIcon(".//Imag//loop.jpg");buttonWay.setIcon(icon);}}}//鼠标点击触发事件public void  mouseClicked(MouseEvent e){if (e.getClickCount() == 2) {/*点击音乐播放列表两次*/if(e.getSource()==listPlayFile){int n =vt.size();//播放列表的音乐数if (n != 0)//如果有音乐{if (listPlayFile.getSelectedValue() != null) {//选中了一个音乐playFileName = listPlayFile.getSelectedValue().toString();playFile = playFileDirectory + playFileName;//播放文件设为选中的文件} else {//未选中则选中第一个playFileName = listPlayFile.getModel().getElementAt(0).toString();playFile = playFileDirectory + playFileName;}audioPlay.SetPlayAudioPath("file:" + playFile);//设置播放路径audioPlay.play();//播放musictitle.setText(listPlayFile.getSelectedValue().toString());//设置音乐名Icon icon = new ImageIcon(".//Imag//stop.jpg");//播放按钮转换为暂停buttonPlay.setIcon(icon);backgroundPlay.setVisible(true);File file = new File(playFile);int nMusicTime = (int)file.length() / 1024 / 173;//文件播放需要的时间timerFun(nMusicTime);}}}}//用不到的接口public void mousePressed(MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void  mouseExited(MouseEvent e){}
}
public class MusicPlay{public static void main(String[] args) {MyExtendsJFrame frame=new MyExtendsJFrame();}
}

仅供参考

源代码及文件

源代码

Java图形用户界面设计音乐播放器相关推荐

  1. java课程设计-音乐播放器_java课程设计---java音乐播放器.doc

    java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...

  2. JAVA毕业设计Vue.js音乐播放器设计与实现计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计Vue.js音乐播放器设计与实现计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计Vue.js音乐播放器设计与实现计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈 ...

  3. java界面设计素材_9.java图形用户界面设计.ppt

    9.java图形用户界面设计.ppt 还剩 150页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 151v 程 ...

  4. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]

    100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...

  5. 音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图(二)

    音频频谱显示-显示音频文件静态频谱图(一) https://blog.csdn.net/xiaolong1126626497/article/details/126971535 音频频谱显示-基于fm ...

  6. Java和vue实现音乐播放器_躁!DJ 风格 Java 桌面音乐播放器

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 版桌面 DJ 音乐播放器. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列 ...

  7. java音乐播放器所需jar包,这个用Java写的开源音乐播放器,我粉了

    原标题:这个用Java写的开源音乐播放器,我粉了 开源最前线(ID:OpenSourceTop) 随着版权意识的增强,如今想听几首歌,都得下载好几个音乐软件.这也就算了,大部分音乐还都是付费的,安装这 ...

  8. android 音乐播放器ui界面设计音乐播放器毕业设计。Android studio编译,项目有源码和apk

    使用Android Studio开发一个简易的音乐播放器 界面图: 视频展示: android 音乐播放器ui界面设计音乐播放器毕业设计.Android studio编译 项目下载: android音 ...

  9. java课程设计-音乐播放器,基于java的音乐播放器设计.doc

    摘要:音乐是生活的必需的,它能够缓解人们焦躁的心情,调节现代化生活的节奏,让人们能够舒缓身心.一个好的音乐播放器,能够实现个性化的功能,它能够根据个人的喜好来推荐歌曲.深流音乐播放器正是实现了此功能, ...

最新文章

  1. OKR的实施案例:OKR不需要很复杂
  2. 【Spring MVC学习】spring mvc入门示例
  3. UE4 HTC VIVE - 番外篇 - 局域网联机(二)
  4. 怎么在右键菜单添加快速比较的功能
  5. RDataMining系列:Chapter 4 Decision Trees --决策树实现,未完待续
  6. 我的个人中心前端开发源代码_个人博客
  7. Android音频框架笔记 - 上篇
  8. 【赏析】15个非常棒的使用CSS3的设计组合
  9. 软考2022上半年真题笔记
  10. 推荐Notepad插件格式化Sql代码,开发利器。
  11. 计算机联锁设备的组成及原理,铁路信号计算机联锁系统及技术分析
  12. matlab三相逆变电路仿真,matlab三相逆变电路设计与仿真介绍.doc
  13. viser 饼图修改颜色
  14. CSS实现多余文本隐藏
  15. 深度学习(deep learning)发展史
  16. 【为人处事】:如何识人
  17. 基于OpenCV的图片电影换背景小实验(可用于证件照替换背景)_计算机视觉
  18. stm32与驱动器AS1106驱动数码管显示
  19. 华为交换机ARP防网关冲突
  20. 体积小性能强悍能吃鸡的电脑主机 NUC8I7HVK

热门文章

  1. 【OpenCV 学习笔记】—— 基于拉普拉斯金字塔的图像融合原理以及C++实现【或许是全网最通俗易懂的讲解】
  2. python+vue校园足球联赛管理系统django源码
  3. 4PAM在高斯信道与瑞利信道下的基带仿真系统实验
  4. springcloud微服务项目解析与服务拆分
  5. 全球名校AI课程库(27)| MIT麻省理工 · 数据结构与算法设计课程『Design and Analysis of Algorithms』
  6. python库:Pandas学习笔记
  7. 尚硅谷 java基础第二个项目之客户关系管理系统
  8. VSCode Clang代码自动格式化
  9. 2020.8.3【算协集训】线性dp
  10. 苹果终于要认真发力智能家居了!挖来前微软副总裁掌舵其人工智能部门!