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

📄 playerui.java

📁 java平台的图形音乐播放器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/*
 * PlayerUI.
 *
 * JavaZOOM : jlgui@javazoom.net
 *            http://www.javazoom.net
 * 
 *-----------------------------------------------------------------------
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Library General Public License as published
 *   by the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU Library General Public License for more details.
 *
 *   You should have received a copy of the GNU Library General Public
 *   License along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *----------------------------------------------------------------------
 */
package javazoom.jlgui.player.amp;

import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.StringTokenizer;
import javax.sound.sampled.SourceDataLine;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javazoom.jlgui.basicplayer.BasicController;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerEvent;
import javazoom.jlgui.basicplayer.BasicPlayerException;
import javazoom.jlgui.basicplayer.BasicPlayerListener;
import javazoom.jlgui.player.amp.equalizer.ui.EqualizerUI;
import javazoom.jlgui.player.amp.playlist.Playlist;
import javazoom.jlgui.player.amp.playlist.PlaylistFactory;
import javazoom.jlgui.player.amp.playlist.PlaylistItem;
import javazoom.jlgui.player.amp.playlist.ui.PlaylistUI;
import javazoom.jlgui.player.amp.skin.AbsoluteLayout;
import javazoom.jlgui.player.amp.skin.DropTargetAdapter;
import javazoom.jlgui.player.amp.skin.ImageBorder;
import javazoom.jlgui.player.amp.skin.PopupAdapter;
import javazoom.jlgui.player.amp.skin.Skin;
import javazoom.jlgui.player.amp.skin.UrlDialog;
import javazoom.jlgui.player.amp.tag.ui.TagSearch;
import javazoom.jlgui.player.amp.util.Config;
import javazoom.jlgui.player.amp.util.FileSelector;
import javazoom.jlgui.player.amp.util.ui.Preferences;
import javazoom.jlgui.player.amp.visual.ui.SpectrumTimeAnalyzer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class PlayerUI extends JPanel implements ActionListener, ChangeListener, BasicPlayerListener
{
    private static Log log = LogFactory.getLog(PlayerUI.class);
    public static final int INIT = 0;
    public static final int OPEN = 1;
    public static final int PLAY = 2;
    public static final int PAUSE = 3;
    public static final int STOP = 4;
    public static final int TEXT_LENGTH_MAX = 30;
    public static final long SCROLL_PERIOD = 250;
    private Skin ui = null;
    private Loader loader = null;
    private Config config = null;
    /*-- Pop up menus --*/
    private JPopupMenu mainpopup = null;
    private JPopupMenu ejectpopup = null;
    private JCheckBoxMenuItem miPlaylist = null;
    private JCheckBoxMenuItem miEqualizer = null;
    private JMenuItem miPlayFile = null;
    private JMenuItem miPlayLocation = null;
    private PopupAdapter popupAdapter = null;
    private PopupAdapter ejectpopupAdapter = null;
    /*-- Sound player --*/
    private BasicController theSoundPlayer = null;
    private Map audioInfo = null;
    private int playerState = INIT;
    /*-- Title text --*/
    private String titleText = Skin.TITLETEXT.toUpperCase();
    private String currentTitle = Skin.TITLETEXT.toUpperCase();
    private String[] titleScrollLabel = null;
    private int scrollIndex = 0;
    private long lastScrollTime = 0L;
    private boolean scrollRight = true;
    private long secondsAmount = 0;
    /*-- Playlist --*/
    private Playlist playlist = null;
    private PlaylistUI playlistUI = null;
    private String currentFileOrURL = null;
    private String currentSongName = null;
    private PlaylistItem currentPlaylistItem = null;
    private boolean currentIsFile;
    /*-- PosBar members --*/
    private boolean posValueJump = false;
    private boolean posDragging = false;
    private double posValue = 0.0;
    /*-- EqualizerUI --*/
    private EqualizerUI equalizerUI = null;

    public PlayerUI()
    {
        super();
        setDoubleBuffered(true);
        ui = new Skin();
    }

    public void setEqualizerUI(EqualizerUI eq)
    {
        equalizerUI = eq;
    }

    public EqualizerUI getEqualizerUI()
    {
        return equalizerUI;
    }

    public PlaylistUI getPlaylistUI()
    {
        return playlistUI;
    }

    public void setPlaylistUI(PlaylistUI playlistUI)
    {
        this.playlistUI = playlistUI;
    }

    public Playlist getPlaylist()
    {
        return playlist;
    }

    /**
     * Return config.
     * @return
     */
    public Config getConfig()
    {
        return config;
    }

    /**
     * Return skin.
     * @return
     */
    public Skin getSkin()
    {
        return ui;
    }

    /**
     * Return parent loader.
     * @return
     */
    public Loader getLoader()
    {
        return loader;
    }

    /**
     * A handle to the BasicPlayer, plugins may control the player through
     * the controller (play, stop, ...)
     * @param controller
     */
    public void setController(BasicController controller)
    {
        theSoundPlayer = controller;
    }

    /**
     * Return player controller.
     * @return
     */
    public BasicController getController()
    {
        return theSoundPlayer;
    }

    /**
     * Load main player.
     * @param loader
     */
    public void loadUI(Loader loader)
    {
        this.loader = loader;
        setLayout(new AbsoluteLayout());
        config = Config.getInstance();
        ui.setConfig(config);
        playlistUI = new PlaylistUI();
        playlistUI.setSkin(ui);
        playlistUI.setPlayer(this);
        equalizerUI = new EqualizerUI();
        equalizerUI.setSkin(ui);
        loadSkin();
        // DnD support.
        DropTargetAdapter dnd = new DropTargetAdapter()
        {
            public void processDrop(Object data)
            {
                processDnD(data);
            }
        };
        DropTarget dt = new DropTarget(this, DnDConstants.ACTION_COPY, dnd, true);
    }

    public void loadSkin()
    {
        log.info("Load PlayerUI (EDT=" + SwingUtilities.isEventDispatchThread() + ")");
        removeAll();
        // Load skin specified in args
        if (ui.getPath() != null)
        {
            log.info("Load default skin from " + ui.getPath());
            ui.loadSkin(ui.getPath());
            config.setDefaultSkin(ui.getPath());
        }
        // Load skin specified in jlgui.ini
        else if ((config.getDefaultSkin() != null) && (!config.getDefaultSkin().trim().equals("")))
        {
            log.info("Load default skin from " + config.getDefaultSkin());
            ui.loadSkin(config.getDefaultSkin());
        }
        // Default included skin
        else
        {
            ClassLoader cl = getClass().getClassLoader();
            InputStream sis = cl.getResourceAsStream("javazoom/jlgui/player/amp/metrix.wsz");
            log.info("Load default skin for JAR");
            ui.loadSkin(sis);
        }
        // Background
        ImageBorder border = new ImageBorder();
        border.setImage(ui.getMainImage());
        setBorder(border);
        // Buttons        
        add(ui.getAcPrevious(), ui.getAcPrevious().getConstraints());
        ui.getAcPrevious().removeActionListener(this);
        ui.getAcPrevious().addActionListener(this);
        add(ui.getAcPlay(), ui.getAcPlay().getConstraints());
        ui.getAcPlay().removeActionListener(this);
        ui.getAcPlay().addActionListener(this);
        add(ui.getAcPause(), ui.getAcPause().getConstraints());
        ui.getAcPause().removeActionListener(this);
        ui.getAcPause().addActionListener(this);
        add(ui.getAcStop(), ui.getAcStop().getConstraints());
        ui.getAcStop().removeActionListener(this);
        ui.getAcStop().addActionListener(this);
        add(ui.getAcNext(), ui.getAcNext().getConstraints());
        ui.getAcNext().removeActionListener(this);
        ui.getAcNext().addActionListener(this);
        add(ui.getAcEject(), ui.getAcEject().getConstraints());
        ui.getAcEject().removeActionListener(this);
        ui.getAcEject().addActionListener(this);
        // EqualizerUI toggle
        add(ui.getAcEqualizer(), ui.getAcEqualizer().getConstraints());
        ui.getAcEqualizer().removeActionListener(this);
        ui.getAcEqualizer().addActionListener(this);
        // Playlist toggle
        add(ui.getAcPlaylist(), ui.getAcPlaylist().getConstraints());
        ui.getAcPlaylist().removeActionListener(this);
        ui.getAcPlaylist().addActionListener(this);
        // Shuffle toggle
        add(ui.getAcShuffle(), ui.getAcShuffle().getConstraints());
        ui.getAcShuffle().removeActionListener(this);
        ui.getAcShuffle().addActionListener(this);
        // Repeat toggle
        add(ui.getAcRepeat(), ui.getAcRepeat().getConstraints());
        ui.getAcRepeat().removeActionListener(this);
        ui.getAcRepeat().addActionListener(this);
        // Volume
        add(ui.getAcVolume(), ui.getAcVolume().getConstraints());
        ui.getAcVolume().removeChangeListener(this);
        ui.getAcVolume().addChangeListener(this);
        // Balance
        add(ui.getAcBalance(), ui.getAcBalance().getConstraints());
        ui.getAcBalance().removeChangeListener(this);
        ui.getAcBalance().addChangeListener(this);
        // Seek bar
        add(ui.getAcPosBar(), ui.getAcPosBar().getConstraints());
        ui.getAcPosBar().removeChangeListener(this);
        ui.getAcPosBar().addChangeListener(this);
        // Mono
        add(ui.getAcMonoIcon(), ui.getAcMonoIcon().getConstraints());
        // Stereo
        add(ui.getAcStereoIcon(), ui.getAcStereoIcon().getConstraints());
        // Title label
        add(ui.getAcTitleLabel(), ui.getAcTitleLabel().getConstraints());
        // Sample rate label
        add(ui.getAcSampleRateLabel(), ui.getAcSampleRateLabel().getConstraints());
        // Bit rate label
        add(ui.getAcBitRateLabel(), ui.getAcBitRateLabel().getConstraints());
        // Play icon
        add(ui.getAcPlayIcon(), ui.getAcPlayIcon().getConstraints());
        // Time icon
        add(ui.getAcTimeIcon(), ui.getAcTimeIcon().getConstraints());
        // MinuteH number
        add(ui.getAcMinuteH(), ui.getAcMinuteH().getConstraints());
        // MinuteL number
        add(ui.getAcMinuteL(), ui.getAcMinuteL().getConstraints());
        // SecondH number
        add(ui.getAcSecondH(), ui.getAcSecondH().getConstraints());
        // SecondL number
        add(ui.getAcSecondL(), ui.getAcSecondL().getConstraints());
        // TitleBar
        add(ui.getAcTitleBar(), ui.getAcTitleBar().getConstraints());
        add(ui.getAcMinimize(), ui.getAcMinimize().getConstraints());
        ui.getAcMinimize().removeActionListener(this);
        ui.getAcMinimize().addActionListener(this);
        add(ui.getAcExit(), ui.getAcExit().getConstraints());
        ui.getAcExit().removeActionListener(this);
        ui.getAcExit().addActionListener(this);
        // DSP
        if (ui.getAcAnalyzer() != null)
        {
            add(ui.getAcAnalyzer(), ui.getAcAnalyzer().getConstraints());
        }
        // Popup menu
        mainpopup = new JPopupMenu(ui.getResource("popup.title"));
        JMenuItem mi = new JMenuItem(Skin.TITLETEXT + "- JavaZOOM");
        //mi.removeActionListener(this);
        //mi.addActionListener(this);
        mainpopup.add(mi);
        mainpopup.addSeparator();
        JMenu playSubMenu = new JMenu(ui.getResource("popup.play"));
        miPlayFile = new JMenuItem(ui.getResource("popup.play.file"));
        miPlayFile.setActionCommand(PlayerActionEvent.MIPLAYFILE);
        miPlayFile.removeActionListener(this);
        miPlayFile.addActionListener(this);
        miPlayLocation = new JMenuItem(ui.getResource("popup.play.location"));
        miPlayLocation.setActionCommand(PlayerActionEvent.MIPLAYLOCATION);
        miPlayLocation.removeActionListener(this);

⌨️ 快捷键说明

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