利用java做一个简单的音乐播放器

来源:互联网 发布:浙江大学网络预约 编辑:程序博客网 时间:2024/06/14 16:22
主要是用到java中的swing技术,以及JMFjar中的API备注:需要用JDK1.8才能播放音乐MP3package baidu;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.swing.*;import javax.media.bean.playerbean.*; //这个包要用到JMFpublic 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;}}

3 0
原创粉丝点击