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

📄 playlistui.java

📁 java+eclipse做的TTPlayer
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.hadeslee.yoyoplayer.playlist;import com.hadeslee.yoyoplayer.util.MultiImageBorder;import com.hadeslee.yoyoplayer.player.ui.PlayerUI;import com.hadeslee.yoyoplayer.tag.SongInfoDialog;import com.hadeslee.yoyoplayer.util.Config;import com.hadeslee.yoyoplayer.util.FileNameFilter;import com.hadeslee.yoyoplayer.util.Util;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Rectangle;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.dnd.DnDConstants;import java.awt.dnd.DragGestureEvent;import java.awt.dnd.DragGestureListener;import java.awt.dnd.DragSource;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.AdjustmentEvent;import java.awt.event.AdjustmentListener;import java.awt.event.InputEvent;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.io.File;import java.io.IOException;import java.net.URI;import java.text.Collator;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Locale;import java.util.Vector;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.ButtonGroup;import javax.swing.DropMode;import javax.swing.JFileChooser;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JMenu;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JRadioButtonMenuItem;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.ListCellRenderer;import javax.swing.SwingConstants;import javax.swing.TransferHandler;import javax.swing.border.EmptyBorder;import javax.swing.plaf.basic.BasicScrollBarUI;/** * * @author hadeslee */@SuppressWarnings("unchecked")public class PlayListUI extends JPanel implements ActionListener, MouseListener,        MouseMotionListener {    private static final long serialVersionUID = 20071214L;    private static Logger log = Logger.getLogger(PlayListUI.class.getName());    private PlayListItem currentItem;//当前的列表项    private PlayList currentPlayList;//当前所使用的播放列表    private PlayerUI player;//播放器的主UI界面兼播放器    private JList leftList,  rightList;//左边和右边的列表    private JSplitPane split;//一个分隔栏    private Config config;//全局配置对象    private final DataFlavor flavor = new DataFlavor(MyData.class, "内部数据");    private Vector<PlayList> playlists;//所有的播放列表    private static final Color BG = new Color(6, 6, 6);    private static final Color FORE = new Color(100, 100, 100);    private static final Color HILIGHT = new Color(0, 244, 245);    private int rightIndex = -1;//右边选中的下标,用于内部拖放用的    private int leftIndex = -1;//左边选中的下标    private int onIndex = -1;//目前鼠标在哪个下标的上面,如果下一个一样的话,就不用再设tooltip了    private boolean rightHasFocus;//指示右边的列表该不该有焦点    private List<PlayListItem> clip;//复制在粘帖板里面的数据    public PlayListUI() {        super(new BorderLayout());        clip = new ArrayList<PlayListItem>();        this.setMinimumSize(new Dimension(285, 100));        this.setPreferredSize(new Dimension(285, 155));        this.setBackground(Config.getConfig().getPlaylistBackground1());//        this.setBackground(Color.RED);    }    public void setPlayerUI(PlayerUI player) {        this.player = player;    }    /**     * 设置当前正在播放的项,     * @param item     */    public void setCurrentItem(PlayListItem item) {        this.currentItem = item;        rightList.setSelectedValue(item, true);        rightList.clearSelection();    }    public void loadUI(Component parent, Config config) {        this.config = config;        playlists = config.getPlayLists();        if (playlists.size() == 0) {            currentPlayList = new BasicPlayList(config);            currentPlayList.setName(Config.getResource("playlistL.PreNEW") + 1);            playlists.add(currentPlayList);        } else {            //找到关闭的时候使用的列表以及放的歌曲,如有必要,自动播放            String current = config.getCurrentPlayListName();            if (current != null) {                boolean find = false;                for (PlayList pl : playlists) {                    if (pl.getName().equals(current)) {                        currentPlayList = pl;                        find = true;                        break;                    }                }                if (find == false) {                    currentPlayList = playlists.get(0);                }            } else {                currentPlayList = playlists.get(0);            }        }        player.setPlayList(currentPlayList);        MultiImageBorder border = new MultiImageBorder(parent, config);        border.setCorner1(Util.getImage("playlist/corner1.png"));        border.setCorner2(Util.getImage("playlist/corner2.png"));        border.setCorner3(Util.getImage("playlist/corner3.png"));        border.setCorner4(Util.getImage("playlist/corner4.png"));        border.setTop(Util.getImage("playlist/top.png"));        border.setBottom(Util.getImage("playlist/bottom.png"));        border.setLeft(Util.getImage("playlist/left.png"));        border.setRight(Util.getImage("playlist/right.png"));        this.setBorder(border);        this.addMouseListener(border);        this.addMouseMotionListener(border);        initUI();    }    private void initUI() {        leftList = new JList();        rightList = new JList();        leftList.setBackground(BG);        rightList.setBackground(BG);        leftList.setListData(playlists);        leftList.setCellRenderer(new LeftListCellRenderer());        rightList.setListData(currentPlayList.getAllItems());        rightList.setCellRenderer(new RightListCellRenderer());        leftList.addMouseListener(this);        rightList.addMouseListener(this);        rightList.addMouseMotionListener(this);        JScrollPane jsp1 = new JScrollPane(leftList);        JScrollPane jsp2 = new JScrollPane(rightList);//        jsp1.setBorder(new EmptyBorder(0, 0, 0, 0));//        jsp2.setBorder(new EmptyBorder(0, 0, 0, 0));        BasicScrollBarUI yoyo1 = new YOYOScrollBarUI();        BasicScrollBarUI yoyo2 = new YOYOScrollBarUI();        jsp1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);        jsp2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);        jsp2.getVerticalScrollBar().setUI(yoyo1);        jsp1.getVerticalScrollBar().setUI(yoyo2);        jsp2.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {            public void adjustmentValueChanged(AdjustmentEvent e) {                if (!config.getReadTagInfoStrategy().equals(Config.READ_WHEN_DISPLAY)) {                    return;                }                int from = rightList.getFirstVisibleIndex();                int to = rightList.getLastVisibleIndex();                if (from == -1 || to == -1) {                    return;                }                for (int i = from; i <= to; i++) {                    currentPlayList.getItemAt(i).getTagInfo();                }            }        });        split = new JSplitPane(SwingConstants.VERTICAL, true, jsp1, jsp2);        split.setBorder(new EmptyBorder(0, 0, 0, 0));        this.add(split);        initDragList();        split.setDividerLocation(60);        //添加键盘事件,以可以用键盘直接删除列表项        rightList.addKeyListener(new KeyAdapter() {            public void keyPressed(KeyEvent ke) {                if (rightIndex != -1 && rightIndex < currentPlayList.getPlaylistSize()) {                    if (ke.getKeyCode() == KeyEvent.VK_DELETE) {                        currentPlayList.removeItemAt(rightIndex);                        rightList.setListData(currentPlayList.getAllItems());                        if (rightIndex > currentPlayList.getPlaylistSize() - 1) {                            rightIndex = 0;                        }                        if (currentPlayList.getPlaylistSize() == 0) {                            return;                        }                        rightList.setSelectedValue(currentPlayList.getItemAt(rightIndex), rightHasFocus);                    }                }            }        });    }    /**     * 初始化拖动列表内部数据     */    private void initDragList() {        DragSource ds = DragSource.getDefaultDragSource();        ds.createDefaultDragGestureRecognizer(rightList, DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener() {            public void dragGestureRecognized(DragGestureEvent dge) {                dge.startDrag(DragSource.DefaultCopyDrop, new Transferable() {                    public DataFlavor[] getTransferDataFlavors() {                        return new DataFlavor[]{flavor};                    }                    public boolean isDataFlavorSupported(DataFlavor flavor) {                        return flavor.equals(flavor);                    }                    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {                        if (isDataFlavorSupported(flavor)) {                            if (rightIndex == -1) {                                return null;                            }                            MyData<PlayListItem> my = new MyData<PlayListItem>(rightIndex, currentPlayList.getItemAt(rightIndex));                            return my;                        } else {                            throw new UnsupportedFlavorException(flavor);                        }                    }                });            }        });        rightList.setTransferHandler(new TransferHandler() {            private static final long serialVersionUID = 20071214L;            @Override            public boolean canImport(TransferSupport support) {                if (!config.isCanDnD()) {                    return false;                }                String os = System.getProperty("os.name");                if (os.startsWith("Windows")) {                    return (support.isDataFlavorSupported(DataFlavor.javaFileListFlavor) ||                            support.isDataFlavorSupported(flavor));                } else if (os.startsWith("Linux")) {                    return support.isDataFlavorSupported(DataFlavor.stringFlavor) ||                            support.isDataFlavorSupported(flavor);                } else {                    return super.canImport(support);                }            }            @Override            public boolean importData(TransferSupport support) {                try {                    if (!canImport(support)) {                        return false;                    }                    Object toSelect = null;                    int index = 0;                    try {                        JList.DropLocation location = (JList.DropLocation) support.getDropLocation();                        index = location.getIndex();                    } catch (Exception exe) {                        exe.printStackTrace();                    }                    if (index < 0) {                        log.log(Level.SEVERE, "拖放点的index出现了小于0的情况!!");                        index = 0;                    }                    Transferable trans = support.getTransferable();                    Object obj = null;                    if (trans.isDataFlavorSupported(flavor)) {                        obj = trans.getTransferData(flavor);                        if (obj == null) {                            return false;                        }                        MyData<PlayListItem> my = (MyData<PlayListItem>) obj;                        currentPlayList.addItemAt(my.getData(), index);                        if (index < my.getOldIndex()) {                            currentPlayList.removeItemAt(my.getOldIndex() + 1);                        } else {                            currentPlayList.removeItemAt(my.getOldIndex());                        }                        toSelect = my.getData();                    } else if (trans.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {                        obj = trans.getTransferData(DataFlavor.javaFileListFlavor);                        List<File> s = (List<File>) obj;                        FileNameFilter ff = new FileNameFilter(Config.EXTS,                                Config.getResource("playlist.filechooser.name"), false);                        for (File f : s) {                            if (f.exists()) {                                //如果是文件,则检查其后缀名                                if (f.isFile() && ff.accept(f)) {                                    PlayListItem item = new PlayListItem(Util.getSongName(f), f.getPath(), -1, true);                                    currentPlayList.addItemAt(item, index);                                    toSelect = item;                                //如果是目录,则遍历它下面的文件,不再往下层遍历了                                } else if (f.isDirectory()) {                                    File[] fs = f.listFiles(ff);                                    for (File file : fs) {                                        PlayListItem item = new PlayListItem(Util.getSongName(file), file.getPath(), -1, true);                                        currentPlayList.addItemAt(item, index);                                        toSelect = item;                                    }                                }                            }                        }                    } else if (trans.isDataFlavorSupported(DataFlavor.stringFlavor) &&                            System.getProperty("os.name").startsWith("Linux")) {                        obj = trans.getTransferData(DataFlavor.stringFlavor);                        log.info("得到的内容是:" + obj);                        String[] ss = obj.toString().split("\r\n");                        FileNameFilter ff = new FileNameFilter(Config.EXTS,                                Config.getResource("playlist.filechooser.name"), false);                        for (String s : ss) {                            try {                                File f = new File(new URI(s));                                if (f.exists()) {                                    //如果是文件,则检查其后缀名                                    //现在不用检查了,错了也不要紧                                    if (f.isFile() && ff.accept(f)) {                                        PlayListItem item = new PlayListItem(Util.getSongName(f), f.getPath(), -1, true);                                        currentPlayList.addItemAt(item, index);                                        toSelect = item;                                    //如果是目录,则遍历它下面的文件,不再往下层遍历了                                    } else if (f.isDirectory()) {                                        File[] fs = f.listFiles(ff);                                        for (File file : fs) {                                            PlayListItem item = new PlayListItem(Util.getSongName(file), file.getPath(), -1, true);                                            currentPlayList.addItemAt(item, index);                                            toSelect = item;                                        }                                    }                                }                            } catch (Exception exe) {                                exe.printStackTrace();

⌨️ 快捷键说明

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