📄 playlistframe.java
字号:
/**************************************************************************
* (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 + -