您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页自己实现的音乐播放器

自己实现的音乐播放器

来源:意榕旅游网


package com.test;

import java.awt.AWTException; import java.awt.Color; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File;

import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException;

import java.io.OutputStreamWriter; import java.util.Vector;

import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.EndOfMediaEvent; import javax.media.Manager;

import javax.media.MediaLocator;

import javax.media.NoPlayerException; import javax.media.Player;

import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JButton;

import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel;

import javax.swing.JScrollPane;

public class Testone { //菜单 private JMenuBar menubar=null; private JMenu menuFile=null; private JMenu menuPlay=null; private JMenuItem openFile=null; private JMenuItem playSong=null; //按钮控件 private JButton btnplaylast=null; private JButton btnplaying=null; private JButton btnplaynext=null;

private JFrame frame = new JFrame(\"音乐播放器\");

private JPanel imagePanel=null;

//歌词界面的背景图片

private ImageIcon backimag=null; private ImageIcon imaeshow=null;

private JLabel labeimageshow=null; private JLabel labsonglist=null;

//***************************************************************************************** //播放列表

private JList list=null;

//初始化播放列表和歌曲地址列表 //设置JList可以自动更新

private DefaultListModel model=new DefaultListModel(); //歌曲名

private Vector songlis=new Vector(); //歌曲路径

private Vector songpathlist=new Vector();

//*****************************************************************************************

private JLabel lab=new JLabel(\"歌词在此处显示,并且随着歌曲的播放,同时读取相应的歌词!!\");

public static void main(String[] args) {

new Testone(); }

//////////////////////////////////////////////////

public Testone() { //读取上次播放列表的内容 readerplaylist();

//初始化窗体 initFrame(); }

public void initFrame() { //初始化控件 imaeshow=new ImageIcon(\"./SuenoDream.jpg\"); backimag= new ImageIcon(\"./background.jpg\"); JLabel label = new JLabel(backimag);

label.setBounds(0,30,backimag.getIconWidth(),backimag.getIconHeight());

//菜单项

menubar=new JMenuBar(); menuFile=new JMenu(\"文件\"); menuPlay=new JMenu(\"播放\"); openFile=new JMenuItem(\"添加\"); playSong=new JMenuItem(\"播放\");

menuFile.add(openFile); menuPlay.add(playSong); menubar.add(menuFile); menubar.add(menuPlay);

menubar.setBackground(new Color(100,200,63));

menubar.setBounds(0, 0,backimag.getIconWidth(),30);

//小广告

labeimageshow=new JLabel(imaeshow);

labeimageshow.setBounds(backimag.getIconWidth(),0,150,30);

//播放列表

labsonglist=new JLabel(\"播放列表:\");

labsonglist.setBounds(backimag.getIconWidth(),30,150,30);

list=new JList(model);

JScrollPane scrollPane = new JScrollPane(list);

scrollPane.setBounds(backimag.getIconWidth(),60,150,backimag.getIconHeight()-30);

lab.setBounds(backimag.getIconWidth()/4,backimag.getIconHeight()/4, backimag.getIconWidth()/2,backimag.getIconHeight()/2 );

//按钮控件的初始化

btnplaylast =new JButton(\"上一首\");

btnplaylast.setBounds(0,backimag.getIconHeight()+50,100,30); btnplaying=new JButton(\"播放\");

btnplaying.setBounds(100,backimag.getIconHeight()+50,100,30); btnplaynext=new JButton(\"下一首\");

btnplaynext.setBounds(200,backimag.getIconHeight()+50,100,30);

//歌词信息面板的初始化

imagePanel = (JPanel)frame.getContentPane(); imagePanel.setOpaque(false); imagePanel.setLayout(null); imagePanel.add(menubar); imagePanel.add(lab);

frame.add(labeimageshow); frame.add(labsonglist); frame.add(scrollPane);

frame.add(btnplaylast); frame.add(btnplaying); frame.add(btnplaynext);

frame.getLayeredPane().setLayout(null);

//把背景图片添加到分层窗格的最底层作为背景

frame.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); frame.setSize(backimag.getIconWidth()+150,backimag.getIconHeight()+120); frame.setVisible(true); frame.setResizable(false);

//按钮动作响应事件

btnplaylast.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { playLastSong(); } });

btnplaying.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { playingSong(); }

});

btnplaynext.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { playnextsong(); } });

//播放列表动作响应

list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.getModifiers()==InputEvent.BUTTON1_MASK&&e.getClickCount()>=2) { tmp=list.getSelectedIndex(); playingSong(); } } });

//菜单的动作响应事件

openFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub checksong(); } });

playSong.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { playingSong(); } });

//系统托盘的调用

javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run()

{ CheckTrayIcon(); } }); }

//******************************************** //读取文件,获得文件的地址 public void checksong() { String str=null; //初始化文件选择框 JFileChooser fDialog = new JFileChooser(); //设置文件选择框的标题 fDialog.setDialogTitle(\"请选择音频文件\"); //弹出选择框 int returnVal = fDialog.showOpenDialog(null); // 如果是选择了文件 if(JFileChooser.APPROVE_OPTION == returnVal) { str=fDialog.getSelectedFile().toString(); if(str.contains(\".mp3\")) { addsongtolist(str); } else { JOptionPane.showMessageDialog(null, \"文件不是mp3文件,请重新选择!\"); checksong(); } } }

//************************************************ //将选择的文件添加到播放列表中,同时播放文件 private String songname=\"\"; private String newsongpath=\"\";

public void addsongtolist(String str) { //取出歌曲名,修改歌曲地址,因为java中'\\'为转义字符,在播放音乐的时候要歌曲地址同时 //系统会将'\\'读为转义字符,故要修改为'\\\\' String []lines=str.split(\"\\\\\\\\\"); for (int i = 0; i < lines.length-1; i++) {

newsongpath=newsongpath+lines[i]+\"\\\\\\\\\"; } songname=lines[lines.length-1]; newsongpath=newsongpath+songname; songlis.add(songname); songpathlist.add(newsongpath); model.addElement(songname); //将添加的歌曲写到文件目录中 myfilesongwriter(songname,newsongpath); //动态添加到播放列表中,同时播放该首音乐,同时修改tt的值 //MyPlay(newsongpath); songname=\"\"; newsongpath=\"\"; }

//************************************************ //************************************************ //播放上一首音乐

public void playLastSong() { //播放列表是否为空,若为空则提示 if(list.getModel().getSize()==0) { JOptionPane.showMessageDialog(null, \"播放列表为空,请添加音频文件:\"); } //播放列表不为空 else { isPlaying(); if(tmp-1<0) { tmp=list.getModel().getSize()+tmp-1; } else { tmp=tmp-1; } path=songpathlist.get(tmp); System.out.println(\"tmp=\"+tmp+\" \"+\"path=\"+path);

MyPlay(path); } }

//************************************************ //若播放列表为空,则给出提示

//首先判断是否有音乐在播放,如有则关闭, //在判断是否有选中的音乐,如有则播放该首音乐,若无,则播放播放列表中的第一首歌曲

//如果有音乐正在播放,则将TMP修改成 当前选中的音乐的下标 public void playingSong() { if(list.getModel().getSize()==0) { JOptionPane.showMessageDialog(null, \"播放列表为空,请添加音频文件:\"); } else { isPlaying(); //是否有选中,若有则修改tmp if(list.getSelectedIndex()!=-1) { tmp=list.getSelectedIndex(); } path=songpathlist.get(tmp); System.out.println(\"tmp=\"+tmp+\" \"+\"path=\"+path); MyPlay(path); } }

//************************************************ //播放下一首音乐

public void playnextsong() { //播放列表是否为空,若为空则提示 if(list.getModel().getSize()==0) { JOptionPane.showMessageDialog(null, \"播放列表为空,请添加音频文件:\"); } //播放列表不为空 else { isPlaying(); if(tmp+1>=list.getModel().getSize())

{ tmp=0; } else { tmp=tmp+1; } path=songpathlist.get(tmp); System.out.println(\"tmp=\"+tmp+\" \"+\"path=\"+path); MyPlay(path); } }

//************************************************ //判断是否有歌曲正在播放,若有则关闭 public void isPlaying() { if(tt==1) { play.close(); tt=0; //修改tmp为当前音乐的下标 System.out.println(\"path=\"+path); for (int i = 0; i //************************************************ private Player play = null; private String path=null; private int tt=0; private int tmp=-1;

//播放音乐

public void MyPlay(String path) { this.path=path;

isPlaying(); try { play=Manager.createPlayer(new MediaLocator(\"file:\" + path)); play.start(); tt=1; } catch (NoPlayerException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); JOptionPane.showMessageDialog(null, \"没有音频文件\"); } //播放完成,则循环播放 play.addControllerListener(new ControllerListener() { @Override public void controllerUpdate(ControllerEvent e) { // TODO Auto-generated method stub if(e instanceof EndOfMediaEvent) { playnextsong(); } } }); }

////////////////////////////////////////////////////////////

//播放列表的保存,以及当前播放音乐的保存 private String filepath=\"./songlist.txt\";

//读播放列表文件

public void readerplaylist() { File file = new File(filepath); BufferedReader reader = null; try {

System.out.println(\"以行为单位读取文件内容,一次读一整行:\"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1;

// 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) {

////

if(line%2==1) { System.out.println(\"歌曲名:\"+tempString); model.addElement(tempString); } else { System.out.println(\"歌曲路径:\"+tempString); songpathlist.add(tempString); } //// line++; }

reader.close();

} catch (IOException e) { e.printStackTrace(); }

finally {

if (reader != null) { try {

reader.close();

} catch (IOException e1) { } } } }

//往播放列表中写入歌曲名和歌曲地址

public void myfilesongwriter(String songname,String songpath) { BufferedWriter out = null; try { out = new BufferedWriter(new OutputStreamWriter(

new FileOutputStream(\"./songlist.tx\ out.write(\"\"); out.newLine();

out.write(songname); out.newLine();

out.write(songpath); }

catch (Exception e)

{

e.printStackTrace();

} finally

{ try { out.flush();

out.close(); }

catch (IOException e)

{

e.printStackTrace(); } } }

//////////////////////////////////////////////////////////// //实现系统托盘图标的显示 private TrayIcon trayIcon = null;

public void CheckTrayIcon() { // if(SystemTray.isSupported()) { //获取表示桌面托盘区的 SystemTray 实例。 SystemTray tray = SystemTray.getSystemTray(); Image image = Toolkit.getDefaultToolkit().getImage(\"./Logo.png\"); //创建系统托盘菜单 PopupMenu my=new PopupMenu(); MenuItem myexit=new MenuItem(\"关闭\"); MenuItem myshowframe=new MenuItem(\"显示窗体\"); myexit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { System.exit(0); } catch (Exception ex) { ex.printStackTrace(); } } });

myshowframe.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub ShowIT(true); } }); //将菜单项添加到菜单中 my.add(myexit); my.add(myshowframe); trayIcon = new TrayIcon(image,\"音乐播放器\ trayIcon.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2) { ShowIT(true); } } }); try { tray.add(trayIcon); } catch (AWTException e) { // TODO: handle exception System.err.println(e); } } else { System.out.println(\"你的系统不支持系统托盘\"); } }

public void ShowIT(boolean visable) { if(frame.isVisible() != visable) frame.setVisible(visable); }

//////////////////////////////////////////////////////////// }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务