⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playlistframe.java

📁 mp3的播放
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
 *	(C) Copyright 2008 by  Tao Liuyuan and Zhang Shuitao.                       *
 *		All Rights Reserved.               								  *
 *     																      *
 *	Project					: KYPlayer     								  *
 *	File					: PlayListFrame.java 						  *	
 *	JDK version used        : jdk1.6.0_u4							      *
 * 	Version                 : 1.00				     					  *
 * 	Created				    : 2008.7.7 by we					  *
 *************************************************************************/
package MP3Player;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
/**
 *  tt爱听播放器播放列表类,用于实现Mp3各种具体功能实现
 * @author  we
 *
 */
public class PlayListFrame extends CustomizeFrame {

	/**
	 * 自动生成的序列化值
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 负责的主界面
	 */
	private MainPlayer mainFrame;
	
	/**
	 * 加载容器
	 */
	private Container container = new Container();

	/**
	 * 歌名
	 */
	@SuppressWarnings("unchecked")
	private List namelist = new ArrayList();

	/**
	 * 歌曲文件
	 */
	@SuppressWarnings("unchecked")
	private List file = new ArrayList();

	/**
	 * 随机产生歌曲的保存文件
	 */

	@SuppressWarnings("unchecked")
	private List saveFile = new ArrayList();

	/**
	 * 记录列表歌曲的数目
	 */
	private static int i = 0;

	/**
	 * 记录获取随机产生的文件的数目
	 */
	private static int k = 0;

	/**
	 * 获取当前要播放歌曲的索引值
	 */
	private static int curfileIndex = -1;

	/**
	 * 获取鼠标点击的歌曲的索引值
	 */
	private static int cursorFileIndex = 0;

	/**
	 * 随机播放 记录随机播放的歌曲数目
	 */
	private static int j1;

	/**
	 * 记录当前被选中的播放模式
	 */
	private static int currentModel = 0;

	/**
	 * 记录 播放跟随鼠标改选项是否被选
	 */
	private boolean flag = false;

	/**
	 * 歌曲列表 
	 */
	private JList musicList = new JList();

	/**
	 * 菜单 编辑栏
	 */
	private JMenu editMenu = new JMenu("编辑");

	/**
	 * 菜单 模式栏
	 */
	private JMenu modelMenu = new JMenu("模式");

	/**
	 * 编辑栏下拉框
	 */
	private CustmizeMenuItem editMenuItem[] = new CustmizeMenuItem[3];

	/**
	 * 模式栏下拉框
	 */
	private CustmizeMenuItem modelMenuItem[] = new CustmizeMenuItem[5];

	/**
	 * 播放列表右键弹出菜单下拉框
	 */
	private CustmizeMenuItem musicPopMenuItem[] = new CustmizeMenuItem[5];

	/**
	 * 模式栏 自动跟随光标
	 */
	private JCheckBoxMenuItem cursorModelMenuItem = new JCheckBoxMenuItem();

	/**
	 * 菜单栏
	 */
	private JMenuBar menuBar = new JMenuBar();
	
	/**
	 * 被加入到歌曲列表的文件
	 */
	private File mediaFile;

	/**
	 * 设置播放模式
	 */
	private static int model1 = 0;

	/**
	 * 播放列表保存记录
	 */
	private PlayListRecord playListRecord = new PlayListRecord();
	/**
	 * 选择文件类型的常数值
	 */
	final private int FILE = 0, FOLDER = 1;

	/**
	 * 播放列表右键弹出菜单
	 */
	private JPopupMenu musicListpopupMenu = new JPopupMenu();

	/**
	 * 左列表右键弹出菜单
	 */
	private JPopupMenu LeftListpopupMenu = new JPopupMenu();

	/**
	 * 左列表的当前选中的索引值
	 */
	private static int currentListIndex = 0;

	/**
	 * 记录当前找到的歌曲索引值
	 */
	private static int currentIndex;
	/**
	 * 编辑类File copyFile
	 */
	private CustomizeEdit customizeedit = new CustomizeEdit();

	/**
	 * 各种播放模式的常数值
	 */
	final private int SINGLE_PLAY = 2, SINGLE_CIRCLE = 1, SEQ_PLAY = 0,
			CIRCLE_PLAY = 3, RANDOM_PLAY = 4;

	@SuppressWarnings("unchecked")
	public PlayListFrame(MainPlayer mainFrame) {
		super();
		this.mainFrame = mainFrame;
		/**
		 * 分割栏右栏:歌曲列表栏
		 */
		musicList.setBorder(null);
		musicList.setBackground(new Color(129,146,243));
		musicList.setFont(new Font("宋体", Font.PLAIN, 12));
		musicList.setForeground(new Color(101,226,58));
		musicList.setSelectionBackground(new Color(129,146,243));
		musicList.setSelectionForeground(Color.white);
		musicList.setOpaque(true);
		musicList.setFixedCellHeight(15);
		musicList.setFixedCellWidth(musicList.getWidth());
		musicList.setSelectionInterval(10, 10);
		musicList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		musicList.setEnabled(true);

		/**
		 * 获取列表当前索引值
		 */
		musicList.addListSelectionListener(new ListSelectionListener() {
			@Override
			public void valueChanged(ListSelectionEvent arg0) {
				// TODO Auto-generated method stub

				cursorFileIndex = musicList.getSelectedIndex();

			}
		});

		// 鼠标双击选取当前歌曲
		musicList.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent event) {
				if (event.isMetaDown()) {
					curfileIndex = cursorFileIndex;
					checkForTriggerEvent(event);
				}
				if (event.getClickCount() == 2) {
					curfileIndex = musicList.getSelectedIndex();
					playSelectedFile(curfileIndex);
				}
			}

			/**
			 * 显示右键菜单
			 * 
			 * @param event
			 */
			private void checkForTriggerEvent(MouseEvent event) {
				// TODO Auto-generated method stub
				musicListpopupMenu.show(event.getComponent(), event.getX(),
						event.getY());
			}
		});
		musicList.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent keyEvent) {
				// Enter键 播放选中的文件
				if (keyEvent.getKeyCode() == KeyEvent.VK_ENTER) {
					curfileIndex = musicList.getSelectedIndex();
					playSelectedFile(curfileIndex);
				}
				// Delete键 删除选中的文件
				else if (keyEvent.getKeyCode() == KeyEvent.VK_DELETE
						|| keyEvent.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
					deleteSelectedFile();
				}
			}
		});

		container.setLayout(new BorderLayout());

		container.add(new JScrollPane(musicList),"Center");
		container.add(menuBar, "South");
		add(container);

		// 右键播放列表的菜单栏
		musicPopMenuItem[0] = new CustmizeMenuItem("播放(P)", "playMenuItem");
		musicPopMenuItem[1] = new CustmizeMenuItem("删除(E)", "delete");
		musicPopMenuItem[2] = new CustmizeMenuItem("复制(C)", "copy");
		musicPopMenuItem[3] = new CustmizeMenuItem("剪切(T)", "cut");
		musicPopMenuItem[4] = new CustmizeMenuItem("粘贴(V)", "paste");

		musicPopMenuItem[0].setMnemonic('P');
		musicPopMenuItem[1].setMnemonic('E');
		musicPopMenuItem[2].setMnemonic('C');
		musicPopMenuItem[3].setMnemonic('T');
		musicPopMenuItem[4].setMnemonic('V');
		// 播放选中的文件
		musicPopMenuItem[0].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				playSelectedFile(curfileIndex);
			}
		});
		// 删除选中的文件
		musicPopMenuItem[1].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				deleteSelectedFile();
			}

		});
		// 复制选中的文件
		musicPopMenuItem[2].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				copyFile(curfileIndex);
			}
		});
		// 剪切选中的文件
		musicPopMenuItem[3].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				cutFile();
			}
		});
		// 粘帖选中的文件
		musicPopMenuItem[4].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				pasteFile();
			}
		});

		musicListpopupMenu.add(musicPopMenuItem[0]);
		musicListpopupMenu.addSeparator();
		musicListpopupMenu.add(musicPopMenuItem[1]);
		musicListpopupMenu.addSeparator();
		for (int j = 3; j < 5; j++) {
			musicListpopupMenu.add(musicPopMenuItem[j]);
		}

		// 菜单栏
		menuBar.add(editMenu);
		menuBar.add(modelMenu);


		// 顺序播放
		modelMenuItem[0] = new CustmizeMenuItem("顺序播放(N)", "Seq_not");
		modelMenuItem[0].addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				currentModel = 0;
				clearMenu(getModelIndex());
				setModelIndex(currentModel);
				resetMenu(getModelIndex());
			}

		});
		// 单曲循环
		modelMenuItem[1] = new CustmizeMenuItem("单曲循环(I)", "Sin_Cir_not");
		modelMenuItem[1].addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				currentModel = 1;
				clearMenu(getModelIndex());
				setModelIndex(currentModel);
				resetMenu(getModelIndex());
			}

		});
		// 单曲播放
		modelMenuItem[2] = new CustmizeMenuItem("单曲播放(S)", "Sin_not");
		modelMenuItem[2].addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				currentModel = 2;
				clearMenu(getModelIndex());
				setModelIndex(currentModel);
				resetMenu(getModelIndex());
			}

		});
		// 循环播放
		modelMenuItem[3] = new CustmizeMenuItem("循环播放(C)", "Cir_not");
		modelMenuItem[3].addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				currentModel = 3;
				clearMenu(getModelIndex());
				setModelIndex(currentModel);
				System.out.println("循环播放:" + modelMenuItem[3].isArmed());
				resetMenu(getModelIndex());
			}

		});
		// 随机播放
		modelMenuItem[4] = new CustmizeMenuItem("随机播放(R)", "Ran_not");
		modelMenuItem[4].addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				currentModel = 4;
				clearMenu(getModelIndex());
				setModelIndex(currentModel);
				resetMenu(getModelIndex());

			}

		});
		// 播放跟随鼠标
		cursorModelMenuItem = new JCheckBoxMenuItem("播放跟随光标(F)", flag);
		cursorModelMenuItem.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent arg0) {
				// TODO Auto-generated method stub
				if (cursorModelMenuItem.isSelected()) {
					flag = true;
				} else
					flag = false;
			}

		});

		modelMenuItem[0].setMnemonic('N');
		modelMenuItem[1].setMnemonic('I');
		modelMenuItem[2].setMnemonic('S');
		modelMenuItem[3].setMnemonic('C');
		modelMenuItem[4].setMnemonic('R');

		cursorModelMenuItem.setMnemonic('F');

		for (int j = 0; j < 5; j++) {
			modelMenu.add(modelMenuItem[j]);
		}
		modelMenu.addSeparator();

		modelMenu.add(cursorModelMenuItem);

		// 菜单 编辑下拉框
		editMenuItem[0] = new CustmizeMenuItem("剪切(T)", "cut");
		editMenuItem[1] = new CustmizeMenuItem("复制(C)", "copy");
		editMenuItem[2] = new CustmizeMenuItem("粘帖(P)", "paste");

		editMenuItem[0].setMnemonic('T');
		editMenuItem[1].setMnemonic('C');
		editMenuItem[2].setMnemonic('P');
		// 剪切 选中的文件
		editMenuItem[0].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				cutFile();
			}

		});
		// 复制 选中的文件
		editMenuItem[1].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				copyFile(curfileIndex);
			}

		});
		// 粘帖 选中的文件
		editMenuItem[2].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				pasteFile();
			}

		});
		for (int j = 0; j < 3; j++) {
			editMenu.add(editMenuItem[j]);
		}
		setTitle("PLAYLIST");
		setSize(mainFrame.getWidth(), mainFrame.getHeight() * 7 / 3);
		setLocation(mainFrame.getX(), mainFrame.getY() + mainFrame.getHeight());
		reset();
		setVisible(true);
		loadPlayList();
	}

	/**
	 * 重设界面元素
	 */
	public void reset() {
		super.reset();
		moveTitle(getWidth() / 2 - 20);

		container.setBounds(13, 19, getWidth() - 25, getHeight() - 44);
	}

	/**
	 * 选择文件或文件夹

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -