📄 jmusic.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package jnotepad;import java.awt.*;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.*;import javax.media.*;import java.io.*;import java.util.*;//为了导入Vector/** * * @author Administrator */class JMusic { private JPanel panel = new JPanel(); public int int_mode = 0; public int index = 0; private Player player;//Play是个实现Controller的接口 public File file, musiclistfile;//利用File类结合JFileChooser进行文件打开操作 public Vector VfileName, VdirName; private String filename; JMusic(JPanel jp)//构造函数 { panel = jp; VfileName = new Vector(); VdirName = new Vector(); musiclistfile = new File("歌曲列表.txt"); this.initMusiclist(); } public void openFile() { JFileChooser filechooser = new JFileChooser(); filechooser.setCurrentDirectory(file); filechooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File f) { return f.getName().toLowerCase().endsWith(".mp3") || f.isDirectory(); } public String getDescription() { return "音乐文件(*.mp3)"; } }); filechooser.showOpenDialog(null); if ((file = filechooser.getSelectedFile()) != null) { createPlayer(); } } private void createPlayer() { filename = file.getName(); String suffix = filename.substring(filename.lastIndexOf(".") + 1); if (!suffix.equals("mp3")) { String extendName = "此播放器好象不支持" + suffix + "格式"; JOptionPane.showMessageDialog(null, extendName, "出错了!!", JOptionPane.ERROR_MESSAGE); return; } closePreviosPlayer();//关闭先前的媒体播放器 try { player = Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承 player.addControllerListener(new ControllerHand());//!!!!!!! player.start(); addList(file); } catch (Exception e) { } } private void closePreviosPlayer() { if (player == null) { return; } player.stop(); player.deallocate(); //停止播放并且重新装载DateSource } private class ControllerHand implements ControllerListener { public void controllerUpdate(ControllerEvent e) { if (e instanceof RealizeCompleteEvent) { Component control = player.getControlPanelComponent(); if (control != null) { panel.removeAll(); panel.add(control, BorderLayout.SOUTH); } panel.doLayout(); panel.getParent().validate(); return; } if (e instanceof EndOfMediaEvent) { if (int_mode == 0) { if (VfileName.size() == 0) { return; } index = (int) (Math.random() * VfileName.size()); index %= VfileName.size(); } if (int_mode == 1) { if (VfileName.size() == 0) { return; } index = (index + 1) % VfileName.size(); } if (int_mode == 2) { player.setMediaTime(new Time(0)); player.start(); } createPlayer2(); } } } private void addList(File file) { index = VfileName.size(); VfileName.addElement(file.getName()); VdirName.addElement(file.getPath()); } public void createPlayer2() { try { filename = VdirName.elementAt(index).toString(); } catch (ArrayIndexOutOfBoundsException e) { return; } file = new File(filename); closePreviosPlayer();//关闭先前的媒体播放器 try { player = Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承 player.addControllerListener(new ControllerHand()); player.start(); } catch (Exception e) { } } public void saveMusiclist() { try { BufferedWriter writer = new BufferedWriter(new FileWriter(musiclistfile)); int size = VdirName.size(); for (int i = 0; i < size; i++) { writer.write((String) VdirName.get(i) + "\n"); writer.write((String) VfileName.get(i) + "\n"); } writer.flush(); writer.close(); } catch (IOException ex) { Logger.getLogger(JMusic.class.getName()).log(Level.SEVERE, null, ex); } } private void initMusiclist() { try { if (!musiclistfile.exists()) { musiclistfile.createNewFile();//防止不存在此文件发生读取错误,这两行代码保证不存在的情况下自动建立 return; } BufferedReader read = new BufferedReader(new FileReader(musiclistfile)); String dirstr = ""; String filestr = ""; do { dirstr = read.readLine(); File filemp3 = new File(dirstr); if (!filemp3.exists() || !dirstr.endsWith("mp3")) { break; } VdirName.addElement(dirstr); filestr = read.readLine(); if (!dirstr.endsWith(filestr)) { VdirName.remove(VdirName.size() - 1); break; } VfileName.addElement(file); } while (dirstr != null && filestr != null); read.close(); } catch (Exception ex) { } if (VfileName.size() > 0) { index = (int) (Math.random() * (VfileName.size() - 1));//产生随即数,进行随即播放 createPlayer2(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -