📄 listpanel.java
字号:
songindex = Integer.parseInt(setplaylist.getProperty("songindex"));
//初始化列表
if(playindex > Integer.parseInt(setplaylist.getProperty("playlistnum")))
playindex = Integer.parseInt(setplaylist.getProperty("playlistnum"));
listnamevt = playlistdata.getListnamevt();
leftlist.setListData(listnamevt);
listnamevt = playlistdata.getSongindex(playindex).getsongnamevt();
rightlist.setListData(listnamevt);
leftlist.setSelectedIndex(playindex);
rightlist.setSelectedIndex(songindex);
if(aplayer != null)
{
aplayer.close();
aplayer = null;
}
panel.setplaybt();
startplay();
}
// 获得播放曲目名
public String getPlayingSongname()
{
playindex = leftlist.getSelectedIndex();
if(playindex != -1)
{
songindex = rightlist.getSelectedIndex();
if(songindex!=-1)
{
songlistdata = playlistdata.getSongindex(playindex);
playname = songlistdata.getsongname(songindex);
}
}
else playname = null;
return playname;
}
// 创建一个播放器aplayer
public void createplayer(String path)
{
try
{
playFile = new File(path);
if(aplayer != null)
{
aplayer.stop();
aplayer.close();
}
aplayer = Manager.createPlayer(playFile.toURL());
aplayer.addControllerListener(this);
aplayer.start();
panel.setsongname(getPlayingSongname());
}catch(NoPlayerException e){
e.printStackTrace();
}
catch(Exception e){
e.printStackTrace();
}
}
// player 事件监听器实现方法
public synchronized void controllerUpdate(ControllerEvent e) {
if (e instanceof RealizeCompleteEvent)
{
if ((comp1 = aplayer.getVisualComponent()) != null)
companel.add (comp1,BorderLayout.CENTER);
if ((comp2 = aplayer.getControlPanelComponent()) != null)
companel.add(comp2,BorderLayout.SOUTH);
validate();
}
if (e instanceof ControllerClosedEvent)
{
if(comp1 !=null)
{
companel.remove(comp1);
comp1 = null;
}
if(comp2 != null)
{
companel.remove(comp2);
comp2 = null;
}
}
if (e instanceof EndOfMediaEvent)
{
nextplay();
}
}
//设置监听器
private void setActionListener ()
{
ActionListener listener = new ItemAction();
addlistItem.addActionListener(listener);
dellistItem.addActionListener(listener);
addfileItem.addActionListener(listener);
addFileItem.addActionListener(listener);
delfileItem.addActionListener(listener);
oneloopItem.addActionListener(listener);
orderlyItem.addActionListener(listener);
loopItem.addActionListener(listener);
leftlist.addMouseListener(new leftMouseHandler());
rightlist.addMouseListener(new rightMouseHandler());
}
//播放列表鼠标单击监听器
private class leftMouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
if(event.getClickCount() == 1)
{
//显示相关的歌曲列表
playindex = leftlist.getSelectedIndex();
if(playindex!=-1)
{
songlistdata = playlistdata.getSongindex(playindex);
listnamevt = songlistdata.getsongnamevt();
rightlist.setListData(listnamevt);
}
}
}
}
//歌曲列表鼠标双击监听器
private class rightMouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
if(event.getClickCount() == 2)
{
//双击播放歌曲
if(aplayer != null)
{
aplayer.close();
aplayer = null;
}
panel.setplaybt();
startplay();
}
}
}
//菜单按钮监听器
private class ItemAction implements ActionListener{
public void actionPerformed(ActionEvent e)
{
//新建列表
if(e.getActionCommand().equals("新建列表"))
{
listna = JOptionPane.showInputDialog
(ListPanel.this,"请输入列表名","新建列表");
playlistdata.setListname(listna);
listnamevt = playlistdata.getListnamevt();
leftlist.setListData(listnamevt);
leftlist.setSelectedIndex(playlistdata.getLength()-1);
listnamevt = playlistdata.getSongindex(playlistdata.getLength()-1).getsongnamevt();
rightlist.setListData(listnamevt);
}
//删除列表
else if(e.getActionCommand().equals("删除列表"))
{
playindex = leftlist.getSelectedIndex();
if(playindex!=-1)
{
if(playindex!=0)
{
playlistdata.getSongindex(playindex).getsongnamevt().clear();
playlistdata.delListname(playindex);
playindex--;
songlistdata = playlistdata.getSongindex(playindex);
listnamevt = songlistdata.getsongnamevt();
}
else
{
if(playlistdata.getLength() == 1)
{
playlistdata.getSongindex(playindex).getsongnamevt().clear();
playlistdata.delListname(playindex);
listnamevt.clear();
}
else
{
playlistdata.getSongindex(playindex).getsongnamevt().clear();
playlistdata.delListname(playindex);
songlistdata = playlistdata.getSongindex(playindex);
listnamevt = songlistdata.getsongnamevt();
}
}
rightlist.setListData(listnamevt);
listnamevt = playlistdata.getListnamevt();
leftlist.setListData(listnamevt);
leftlist.setSelectedIndex(playindex);
}
}
//添加单个文件
else if(e.getActionCommand().equals("添加文件"))
{
chooser = new JFileChooser();
chooser.setFileFilter(new AudioFilter());
int flag = chooser.showOpenDialog(ListPanel.this);
if(flag == JFileChooser.APPROVE_OPTION)
{
playindex = leftlist.getSelectedIndex();
if(playindex!=-1)
{
filename = chooser.getSelectedFile().getName();
filepath = chooser.getSelectedFile().getPath();
songlistdata = playlistdata.getSongindex(playindex);
songlistdata.setsongname(filename, filepath);
listnamevt = songlistdata.getsongnamevt();
rightlist.setListData(listnamevt);
}
}
else if(flag == JFileChooser.CANCEL_OPTION)
{}
}
//添加文件夹中的文件
else if(e.getActionCommand().equals("添加文件夹"))
{
chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(true);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setFileFilter(new AudioFilter());
int flag = chooser.showOpenDialog(ListPanel.this);
if(flag == JFileChooser.APPROVE_OPTION)
{
playindex = leftlist.getSelectedIndex();
if(playindex!=-1)
{
file = chooser.getSelectedFile().listFiles();
int n = 0;
while(n<file.length)
{
filename = file[n].getName();
filepath = file[n].getPath();
if(file[n].getName().toLowerCase().endsWith(".mp3"))
{
songlistdata = playlistdata.getSongindex(playindex);
songlistdata.setsongname(filename, filepath);
listnamevt = songlistdata.getsongnamevt();
rightlist.setListData(listnamevt);
}
n++;
}
}
}
else if(flag == JFileChooser.CANCEL_OPTION)
{}
}
//删除文件
else if(e.getActionCommand().equals("删除文件"))
{
playindex = leftlist.getSelectedIndex();
if(playindex!=-1)
{
songindex = rightlist.getSelectedIndex();
if(songindex!=-1)
{
songlistdata = playlistdata.getSongindex(playindex);
songlistdata.delsongname(songindex);
listnamevt = songlistdata.getsongnamevt();
rightlist.setListData(listnamevt);
}
}
}
//单曲循环
else if(e.getActionCommand().equals("单曲循环"))
{
playmode = 1;
modelabel.setText("单曲循环");
}
//顺序播放
else if(e.getActionCommand().equals("顺序播放"))
{
playmode = 2;
modelabel.setText("顺序播放");
}
//循环播放
else if(e.getActionCommand().equals("循环播放"))
{
playmode = 3;
modelabel.setText("循环播放");
}
}
}
private JPanel northpanel;
private JPanel menupanel;
private JPanel leftpanel;
private JPanel rightpanel;
private JPanel companel;
private JMenuBar menubar;
private JMenu filemenu;
private JMenu listmenu;
private JMenu modemenu;
private JMenuItem addlistItem;//添加列表
private JMenuItem addfileItem;//添加文件到列表
private JMenuItem addFileItem;//从文件夹添加文件到列表
private JMenuItem delfileItem;//删除文件
private JMenuItem dellistItem;//删除列表
private JLabel modelabel;
private JMenuItem oneloopItem; //单曲循环播放
private JMenuItem orderlyItem; //顺序播放
private JMenuItem loopItem; //循环播放
private JList leftlist; //左边的列表
private JList rightlist; //右边的列表
private Vector listnamevt; //列表数据向量
private String listna;
private String playpath; //播放路径
private String playname; //播放歌曲名
private PlayListData playlistdata;
private SongListData songlistdata;
private int playindex; //播放列表计数
private int songindex; //歌曲列表计数
private JFileChooser chooser;
private String filename;
private String filepath;
private File [] file;
private Player aplayer; //Player播放器
private Component comp1;//Player 可视组件
private Component comp2;//Player控制组件
private File playFile;
private int playmode = 2; //标记播放模式 1. 单曲播放 2.顺序播放 3.循环播放
private String nextORfront = null; //
private MainPanel panel;
private int songfiles;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -