利用java制作简单的音乐播放器
时间:2019-03-30
本文章向大家介绍利用java制作简单的音乐播放器,主要包括利用java制作简单的音乐播放器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文主要是用到java中的swing技术,以及JMFjar中的API,为大家分享了java音乐播放器的具体实现代码,供大家参考,具体内容如下
备注:需要用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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 记录一个发邮件的cs文件
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
- xml-rpc(2)-first demo_v2
- xml-rpc(1)-first demo
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局
- 网站源文件被注入了iframe代码—ARP欺骗的木马病毒攻击
- ASP.NET MVC5+EF6+EasyUI 后台管理系统--工作流演示截图
- 基于CPPN与GAN+VAE生成高分辨率图像
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控
- (收藏)搭建.NET Framework 3.0开发环境 及SharePoint 2007/WSS 3环境
- WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(48)-工作流设计-起草新申请
- 把windows2003“搬”到手机上。
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(53)-工作流设计-我的批阅
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- python第三十课--异常(raise关键字)
- python第三十课--异常(异常对象传递过程)
- python第三十课--异常(with as操作)
- linux系统运维企业常见面试题集合(二)
- Linux系统Shell编程—企业生产案例(一)
- python第三十一课--递归(1.简单递归函数的定义和使用)
- python第三十一课--递归(2.遍历某个路径下面的所有内容)
- python第三十一课--递归(3.递归的弊端)
- python第三十二课——栈
- linux系统运维企业常见面试题集合(三)
- python第三十二课——队列
- python第三十四课——1.匿名函数的定义和使用
- python第三十四课——2.匿名函数配合容器函数的使用
- 专家专栏|使用agent2自定义插件采集通过MQTT协议发送的数据
- Linux系统双网卡绑定配置教程