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 //初始化播放列表和歌曲地址列表 //设置JList可以自动更新 private DefaultListModel private Vector private 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 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 //播放音乐 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务