java实现简单音乐播放器
更新时间:2019年9月4日 23:33 点击:539
本文实例为大家分享了java实现简单音乐播放器的具体代码,供大家参考,具体内容如下
主要是用到java中的swing技术,以及JMFjar中的API
备注:需要用JDK1.8才能播放音乐MP3
package baidu; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.media.bean.playerbean.*; //这个包要用到JMF public class MP3 extends JFrame implements Runnable { public JLabel shijian; private JSlider sldDiameter; public MediaPlayer soumd1; public JButton playSound, loopSound, stopsound; public JButton tjian, shanc, baocun, duqu; public JPanel jp1, jp2, jp3, jp4; public JList jl; int zongmiao=0; public Vector vector, mingcheng; boolean fo = false, geshi = false; JLabel jl1, jl2, sj1, sj2; JTextField jt1, jt2; JButton queding, xiugai; int zong = 0; int a = 0, b = 0, you = 1,mm=0; int fenzhong, miaozhong; public MP3() { super("java简单音乐播放器--严楷"); soumd1 = new MediaPlayer(); Container c = getContentPane(); c.setLayout(new FlowLayout()); mingcheng = new Vector(); jp1 = new JPanel(); shijian = new JLabel(); jp1.add(shijian); c.add(jp1); playSound = new JButton("开始播放"); loopSound = new JButton("循环播放"); stopsound = new JButton("停止播放"); jp2 = new JPanel(); jp2.add(playSound); jp2.add(loopSound); jp2.add(stopsound); c.add(jp2); jp4 = new JPanel(); sj1 = new JLabel(); sj2 = new JLabel(); sldDiameter = new JSlider(SwingConstants.HORIZONTAL, 0, 100, 0); sldDiameter.setMajorTickSpacing(1); sldDiameter.setPaintTicks(true); jp4.add(sj1); jp4.add(sldDiameter); jp4.add(sj2); c.add(jp4); vector = new Vector(); jl = new JList(mingcheng); jl.setVisibleRowCount(5); jl.setFixedCellHeight(40); jl.setFixedCellWidth(265); jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); c.add(new JScrollPane(jl)); tjian = new JButton("添加"); shanc = new JButton("删除"); duqu = new JButton("读取"); baocun = new JButton("保存"); jp3 = new JPanel(); jp3.add(tjian); jp3.add(shanc); jp3.add(baocun); jp3.add(duqu); c.add(jp3); try { String s =" C:/Users/Administrator/Music/卓依婷 - 萍聚.mp3"; ObjectInputStream input = new ObjectInputStream( new FileInputStream(s)); lujin a1 = (lujin) input.readObject(); mingcheng = a1.b; vector = a1.a; jl.setListData(mingcheng); } catch (Exception e) { System.out.println("c盘没有保存音乐文件"); //e.printStackTrace(); } baocun.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器 fileChooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); // 设置文件选择模式,此处为文件和目录均可 if (fileChooser.showSaveDialog(MP3.this) == JFileChooser.APPROVE_OPTION) { // 弹出文件选择器,并判断是否点击了打开按钮 String fileName = fileChooser.getSelectedFile() .getAbsolutePath(); // 得到选择文件或目录的绝对路径 mmm(vector, mingcheng, fileName); } } }); duqu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器 fileChooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); // 设置文件选择模式,此处为文件和目录均可 if (fileChooser.showOpenDialog(MP3.this) == JFileChooser.APPROVE_OPTION) { // 弹出文件选择器,并判断是否点击了打开按钮 String fileName = fileChooser.getSelectedFile() .getAbsolutePath(); // 得到选择文件或目录的绝对路径 try { ObjectInputStream input = new ObjectInputStream( new FileInputStream(fileName)); lujin a1 = (lujin) input.readObject(); mingcheng = a1.b; vector = a1.a; jl.setListData(mingcheng); } catch (Exception e) { e.printStackTrace(); } } } }); playSound.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (jl.getSelectedIndex() >= 0) { String yy = (String) vector.get(jl.getSelectedIndex()); File ff = new File(yy); if (ff.exists()) { if (yy.matches("[\\S\\s]*.mp3")|| yy.matches("[\\S\\s]*.MP3")) { if (soumd1 != null) { a = 0; b = 0; you = 0; soumd1.stop(); } soumd1.setMediaLocation("file:/" + yy); fo = true; soumd1.start(); geshi=true; try { Thread.sleep(500); } catch (InterruptedException eee) { } zongmiao=(int)soumd1.getDuration().getSeconds(); if(zongmiao>10000) { try { Thread.sleep(500); } catch (InterruptedException ew) { } zongmiao=(int)soumd1.getDuration().getSeconds(); } zongmiao=(int)soumd1.getDuration().getSeconds(); String aa=fen(zongmiao); sj2.setText(aa); } else JOptionPane.showMessageDialog(null, "播放文件格式的有错,无法播放 建议删除"); } else JOptionPane.showMessageDialog(null, "此歌曲文件已经不存在,建议删除"); } else JOptionPane.showMessageDialog(null, "请选择音乐文件"); } }); loopSound.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (jl.getSelectedIndex() >= 0) { String yy = (String) vector.get(jl.getSelectedIndex()); File ff = new File(yy); if (ff.exists()) { if (yy.matches("[\\S\\s]*.mp3")|| yy.matches("[\\S\\s]*.MP3")) { if (soumd1 != null) { a = 0; b = 0; you = 0; soumd1.stop(); } soumd1.setMediaLocation("file:/" + yy); fo = true; soumd1.start(); geshi=true; try { Thread.sleep(500); } catch (InterruptedException we) { } zongmiao=(int)soumd1.getDuration().getSeconds(); if(zongmiao>10000) { try { Thread.sleep(500); } catch (InterruptedException we) { } zongmiao=(int)soumd1.getDuration().getSeconds(); } zongmiao=(int)soumd1.getDuration().getSeconds(); String aa=fen(zongmiao); sj2.setText(aa); } else JOptionPane.showMessageDialog(null, "播放文件格式的有错,无法播放 建议删除"); } else JOptionPane.showMessageDialog(null, "此歌曲文件已经不存在,建议删除"); } else JOptionPane.showMessageDialog(null, "请选择音乐文件"); } }); stopsound.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { a = 0; b = 0; you = 0; mm=0; geshi=false; fo = false; sldDiameter.setMaximum(100); sldDiameter.setValue(0); sj1.setText(null); sj2.setText(null); if (jl.getSelectedIndex() >= 0) soumd1.stop(); } }); tjian.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); // 实例化文件选择器 fileChooser .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); // 设置文件选择模式,此处为文件和目录均可 fileChooser.setCurrentDirectory(new File(".")); // 设置文件选择器当前目录 fileChooser .setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { // 可接受的文件类型 String name = file.getName().toLowerCase(); return name.endsWith(".mp3") || file.isDirectory(); } public String getDescription() { // 文件描述 return "音乐文件(*.mp3)"; } }); if (fileChooser.showOpenDialog(MP3.this) == JFileChooser.APPROVE_OPTION) { // 弹出文件选择器,并判断是否点击了打开按钮 String fileName = fileChooser.getSelectedFile() .getAbsolutePath(); // 得到选择文件或目录的绝对路径 vector.add(fileName); StringBuffer buffer = daoxu(fileName); mingcheng.add(buffer); } } }); shanc.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if (jl.getSelectedIndex() >= 0) { mingcheng.removeElementAt(jl.getSelectedIndex()); vector.removeElementAt(jl.getSelectedIndex()); jl.setListData(mingcheng); } } }); jl.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { if (event.getClickCount() == 2) { if (jl.getSelectedIndex() >= 0) { String yy = (String) vector.get(jl.getSelectedIndex()); File ff = new File(yy); if (ff.exists()) { if (yy.matches("[\\S\\s]*.mp3")|| yy.matches("[\\S\\s]*.MP3")) { if (soumd1 != null) { a = 0; b = 0; you = 0; soumd1.stop(); } soumd1.setMediaLocation("file:/" + yy); fo = true; soumd1.start(); geshi=true; try { Thread.sleep(500); } catch (InterruptedException e) { } zongmiao=(int)soumd1.getDuration().getSeconds(); if(zongmiao>10000) { try { Thread.sleep(500); } catch (InterruptedException e) { } zongmiao=(int)soumd1.getDuration().getSeconds(); } String aa=fen(zongmiao); sj2.setText(aa); } else JOptionPane.showMessageDialog(null, "播放文件格式的有错,无法播放 建议删除"); } else JOptionPane.showMessageDialog(null, "此歌曲文件已经不存在,建议删除"); } } if (event.isMetaDown()) { if (jl.getSelectedIndex() >= 0) { int a = jl.getSelectedIndex(); xiugai x = new xiugai(); jt1.setText(mingcheng.get(jl.getSelectedIndex()) + ""); jt2.setText(vector.get(jl.getSelectedIndex()) + ""); } } } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { String s = "c:\\music.txt"; mmm(vector, mingcheng, s); System.exit(0); } }); setSize(300, 400); setVisible(true); } public void run() { while (true) { Date now = new Date(); //shijian.setText("当前时间: " + now.getYear()+"年"+now.getMonth()+"月"+now.getDate()+"日"+now.getTime()); shijian.setText("当前时间:"+(new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date())+" 严楷"); try { Thread.sleep(1000); } catch (InterruptedException e) { } if(geshi){ you=(int)soumd1.getMediaTime().getSeconds(); mm =you%60; if(you!=0) if(you%60==0) { b++; } sj1.setText(b+":"+mm); sldDiameter.setMaximum(zongmiao); if(you!=zongmiao) sldDiameter.setValue(you); else { sldDiameter.setValue(0); mm=0; b=0; } } } } public StringBuffer daoxu(String fileName) { String mc = ""; for (int i = fileName.length(); i >= 1; i--) { if (fileName.charAt(i - 1) == '\\') break; mc += fileName.charAt(i - 1); } StringBuffer buffer = new StringBuffer(mc); StringBuffer mm = buffer.reverse(); return mm; } public void mmm(Vector vector, Vector mingcheng, String lujin) { lujin a = new lujin(vector, mingcheng); try { ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(lujin)); output.writeObject(a); output.flush(); output.close(); } catch (Exception e) { } } public String fen(int yy) { fenzhong = (int) yy / 60; miaozhong = (int) yy % 60; String sss = fenzhong + ":" + miaozhong; return sss; } public static void main(String agrs[]) { MP3 s = new MP3(); Thread t1 = new Thread(s); t1.start(); s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class xiugai extends JFrame { public xiugai() { jl1 = new JLabel("文件名"); jt1 = new JTextField(20); jl2 = new JLabel("文件路径"); jt2 = new JTextField(20); xiugai = new JButton("修改"); Container c = getContentPane(); c.setLayout(new GridLayout(3, 1)); JPanel j1 = new JPanel(); JPanel j2 = new JPanel(); JPanel j3 = new JPanel(); j1.add(jl1); j1.add(jt1); j2.add(jl2); j2.add(jt2); j3.add(xiugai); c.add(j1); c.add(j2); c.add(j3); xiugai.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { mingcheng.setElementAt(jt1.getText(), jl.getSelectedIndex()); vector.setElementAt(jt2.getText(), jl.getSelectedIndex()); jl.setListData(mingcheng); dispose(); } }); setSize(300, 120); setVisible(true); } } } class lujin implements Serializable { Vector a = new Vector(); Vector b = new Vector(); public lujin(Vector vector, Vector mingcheng) { a = vector; b = mingcheng; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
上一篇: 返回列表
下一篇: Java中内部类的深入了解
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20- 这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19
- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
- 在Java中,我们可以利用多线程来最大化地压榨CPU多核计算的能力,下面这篇文章主要给大家介绍了关于java中多线程与线程池基本使用的相关资料,需要的朋友可以参考下...2021-09-13