📄 playlistui.java
字号:
} } } rightList.setListData(currentPlayList.getAllItems()); rightList.setSelectedValue(toSelect, true); return true; } catch (UnsupportedFlavorException ex) { Logger.getLogger(PlayListUI.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(PlayListUI.class.getName()).log(Level.SEVERE, null, ex); } return super.importData(support); } }); rightList.setDropMode(DropMode.INSERT); } public void setPlaylist(PlayList playlist) { if (playlist == currentPlayList) { return; } rightHasFocus = false; this.currentPlayList = playlist; player.setPlayList(playlist); config.setCurrentPlayListName(playlist.getName()); rightList.setListData(currentPlayList.getAllItems()); rightList.setSelectedValue(player.getCurrentItem(), true); } public void actionPerformed(ActionEvent e) { } public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) { if (e.getSource() == rightList) { if (rightIndex == -1) { return; } PlayListItem pl = currentPlayList.getItemAt(rightIndex); log.info("pl=" + pl); if (pl != null) { currentPlayList.setItemSelected(pl, rightList.getSelectedIndex()); player.setPlayerState(PlayerUI.PLAY); player.setCurrentSong(pl); } } else if (e.getSource() == leftList) { if (leftIndex == -1) { return; } PlayList pl = playlists.get(leftIndex); String s = JOptionPane.showInputDialog(config.getPlWindow(), Config.getResource("playlist.rename.content")); if (s != null && !s.trim().equals("")) { pl.setName(s); } leftList.setListData(playlists); repaint(); } } } public void mousePressed(MouseEvent e) { //这个方法就是保证无论是左键还是右键 //点击都算选中,默认的JAVA实现不是这样的,所以要重写 if (e.getSource() == rightList) { rightHasFocus = true; rightIndex = rightList.locationToIndex(e.getPoint()); if ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) == InputEvent.CTRL_DOWN_MASK) { rightList.addSelectionInterval(rightIndex, rightIndex); } else if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) { rightList.setSelectionInterval(rightList.getAnchorSelectionIndex(), rightIndex); } else { if (e.getButton() == MouseEvent.BUTTON1) { rightList.setSelectedIndex(rightIndex); } else if (e.getButton() == MouseEvent.BUTTON3) { if (!rightList.isSelectedIndex(rightIndex)) { rightList.setSelectedIndex(rightIndex); } } } rightList.repaint(); } else if (e.getSource() == leftList) {// rightHasFocus = false; leftIndex = leftList.locationToIndex(e.getPoint()); leftList.setSelectedIndex(leftIndex); if (leftIndex == -1) { return; } Object obj = playlists.get(leftIndex); if (obj != null) { this.setPlaylist((PlayList) obj); } leftList.repaint(); } } public void mouseReleased(MouseEvent e) {// if (e.getSource() == rightList) {// rightHasFocus = true;// rightIndex = rightList.locationToIndex(e.getPoint());//// rightList.setSelectedIndex(rightIndex);// }// if (e.getButton() == MouseEvent.BUTTON1) {// if (e.getSource() == leftList) {//// Object obj = leftList.getSelectedValue();//// if (obj != null) {//// this.setPlaylist((PlayList) obj);//// }// }// } if (e.getButton() == MouseEvent.BUTTON3) { if (e.getSource() == rightList) { showRightMenu(e); } else if (e.getSource() == leftList) { showLeftMenu(e); } } } /** * 显示左边的右键菜单 * @param e 鼠标事件 */ private void showLeftMenu(MouseEvent e) { JPopupMenu pop = new JPopupMenu(); //新建列表 pop.add(Config.getResource("playlistL.newplaylist")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { int i = playlists.size(); String name = Config.getResource("playlistL.PreNEW") + (i + 1); BasicPlayList plist = new BasicPlayList(config); plist.setName(name); playlists.add(plist); setPlaylist(plist); leftList.setListData(playlists); leftList.setSelectedValue(plist, true); repaint();// SwingUtilities.updateComponentTreeUI(leftList); } }); //添加列表 pop.add(Config.getResource("playlistL.addplaylist")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JFileChooser jf = Util.getFileChooser(new FileNameFilter("m3u,pls", Config.getResource("playlist.filechooser.name"), true), JFileChooser.FILES_ONLY); int i = jf.showOpenDialog(config.getPlWindow()); if (i == JFileChooser.APPROVE_OPTION) { BasicPlayList bp = new BasicPlayList(config); boolean b = bp.load(jf.getSelectedFile().getPath()); if (b) { playlists.add(bp); setPlaylist(bp); leftList.setListData(playlists); leftList.setSelectedValue(bp, true); repaint(); //SwingUtilities.updateComponentTreeUI(leftList); //SwingUtilities.updateComponentTreeUI(rightList); } } } }); //保存列表 JMenuItem save = new JMenuItem(Config.getResource("playlistL.saveplaylist")); save.setEnabled(leftIndex != -1); pop.add(save).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { PlayList pl = playlists.get(leftIndex); JFileChooser jf = Util.getFileChooser(new FileNameFilter("m3u", Config.getResource("playlist.filechooser.name"), true), JFileChooser.FILES_ONLY); jf.setSelectedFile(new File(pl.getName() + ".m3u")); int i = jf.showSaveDialog(config.getPlWindow()); if (i == JFileChooser.APPROVE_OPTION) { PlayList bp = playlists.get(leftIndex); boolean b = bp.save(jf.getSelectedFile().getPath()); } } }); //删除列表 JMenuItem delete = new JMenuItem(Config.getResource("playlistL.deleteplaylist")); delete.setEnabled(leftIndex != -1); pop.add(delete).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { playlists.remove(leftIndex); if (playlists.size() > 0) { if (leftIndex > playlists.size() - 1) { setPlaylist(playlists.get(0)); } else { setPlaylist(playlists.get(leftIndex)); } } leftList.setListData(playlists); repaint(); //SwingUtilities.updateComponentTreeUI(leftList); } }); pop.addSeparator(); //保存所有 pop.add(Config.getResource("playlistL.saveall")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JFileChooser jf = Util.getFileChooser(new FileNameFilter("m3u", Config.getResource("playlist.filechooser.name"), true), JFileChooser.DIRECTORIES_ONLY); int i = jf.showSaveDialog(config.getPlWindow()); if (i == JFileChooser.APPROVE_OPTION) { File f = jf.getSelectedFile(); if (!f.exists()) { f.mkdirs(); } String dir = f.getPath(); for (PlayList pl : playlists) { pl.save(dir + File.separator + pl.getName() + ".m3u"); } } } }); pop.addSeparator(); //重命名列表 JMenuItem rename = new JMenuItem(Config.getResource("playlistL.rename")); rename.setEnabled(leftIndex != -1); pop.add(rename).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { PlayList pl = playlists.get(leftIndex); String s = JOptionPane.showInputDialog(config.getPlWindow(), Config.getResource("playlist.rename.content")); if (s != null && !s.trim().equals("")) { pl.setName(s); } leftList.setListData(playlists); repaint(); //SwingUtilities.updateComponentTreeUI(leftList); } }); pop.addSeparator(); //重排序列表 pop.add(Config.getResource("playlistL.resort")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { Collections.sort(playlists, new Comparator<PlayList>() { public int compare(PlayList o1, PlayList o2) { String s1 = o1.getName(); String s2 = o2.getName(); return Collator.getInstance(Locale.CHINESE).compare(s1, s2); } }); repaint(); leftList.setListData(playlists); //SwingUtilities.updateComponentTreeUI(leftList); } }); pop.show(e.getComponent(), e.getX(), e.getY()); } /** * 显示右边的右键菜单 * @param e 鼠标事件 */ private void showRightMenu(MouseEvent e) { //说明这个时候选中的是空白区域 if (false) { return; }//否则就表示选中了一个项目 else { JPopupMenu pop = new JPopupMenu(); //播放按钮 if (rightIndex != -1) { pop.add("<html><b>" + Config.getResource("playlist.play")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { PlayListItem pl = currentPlayList.getItemAt(rightIndex); currentPlayList.setItemSelected(pl, rightList.getSelectedIndex()); player.setPlayerState(PlayerUI.PLAY); player.setCurrentSong(pl);// player.play(); } }); }// pop.addSeparator(); //文件属性 if (rightIndex != -1) { pop.add(Config.getResource("playlist.file.property")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { PlayListItem pl = currentPlayList.getItemAt(rightIndex); if (pl != null) { new SongInfoDialog(config.getPlWindow(), true, pl).setVisible(true); } } }); } pop.addSeparator(); //添加菜单 JMenu add = createAddMenu(); pop.add(add);// pop.addSeparator(); //删除菜单 JMenu delete = createDeleteMenu(); pop.add(delete);// pop.addSeparator(); //重命名菜单 JMenu rename = createRenameMenu(); pop.add(rename);// pop.addSeparator(); //查找菜单 JMenu search = createSearchMenu(); pop.add(search);// pop.addSeparator(); //排序菜单 JMenu sort = createSortMenu(); pop.add(sort);// pop.addSeparator(); //编辑菜单 JMenu edit = createEditMenu(); pop.add(edit);// pop.addSeparator(); //模式菜单 JMenu mode = createModeMenu(); pop.add(mode); pop.show(e.getComponent(), e.getX(), e.getY()); rightList.requestFocus(); } } /** * 得到重命名的菜单,里面已经构造好了菜单项 * @return 菜单 */ private JMenu createRenameMenu() { JMenu menu = new JMenu(Config.getResource("playlist.rename")); if (rightIndex == -1) { menu.setEnabled(false); return menu; } //加这个限制是因为只有文件才能重命名,而网上的文件就不行了 menu.setEnabled(currentPlayList.getItemAt(rightIndex).isFile()); //歌曲.扩展名命名法 menu.add(Config.getResource("playlist.rename.songName.ext")).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { PlayListItem item = currentPlayList.getItemAt(rightIndex); //说明 这个时候正在播放这首歌曲,所以先停下来 if (item == player.getCurrentItem()) { player.stop(); } File file = new File(item.getLocation()); File rename = new File(file.getParent(), item.getTitle() + "." + Util.getType(file)); boolean b = file.renameTo(rename); if (b) { item.setLocation(rename.getPath()); } log.log(Level.INFO, "把文件:" + file + "重命名为:" + rename); log.log(Level.INFO, "命名成功了吗?" + b); } }); //歌手 - 歌曲名.扩展名
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -