📄 main.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.hadeslee.yoyoplayer.player.ui;import com.hadeslee.yoyoplayer.player.BasicPlayer;import com.hadeslee.yoyoplayer.setting.AboutPanel;import com.hadeslee.yoyoplayer.util.Config;import com.hadeslee.yoyoplayer.util.DragMoveAdapter;import com.hadeslee.yoyoplayer.util.Loader;import com.hadeslee.yoyoplayer.util.Util;import com.sun.jna.examples.WindowUtils;import java.awt.AWTException;import java.awt.Dimension;import java.awt.Image;import java.awt.MenuItem;import java.awt.Point;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.TrayIcon;import java.awt.Window;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowStateListener;import java.io.IOException;import java.net.URL;import java.util.Iterator;import java.util.List;import java.util.logging.Level;import java.util.logging.LogManager;import java.util.logging.Logger;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.ImageIcon;import javax.swing.JComponent;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.KeyStroke;import javax.swing.SwingUtilities;import javax.swing.UIManager;/** * * @author hadeslee */public class Main extends JFrame implements Loader { private Logger log = Logger.getLogger(Main.class.getName()); private static final long serialVersionUID = 20071214L; private PlayerUI mp = null; private JDialog eqWin = null; private JDialog plWin = null; private JDialog lrcWin = null; private Config config = null;// private RoundRectangle2D.Float rectPl, rectLrc; public Main() { System.setProperty("sun.java2d.noddraw", "true"); Logger main = Logger.getLogger("com"); main.setLevel(Level.ALL); } public static void main(String[] args) { try { LogManager lm = LogManager.getLogManager(); lm.readConfiguration(Main.class.getResourceAsStream("/com/hadeslee/yoyoplayer/util/Log.properties")); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (SecurityException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } CheckThread th = new CheckThread(); th.setDaemon(true); th.start(); final Main player = new Main(); SwingUtilities.invokeLater(new Runnable() { public void run() { player.loadUI(); player.loadJS(); player.loadPlaylist(); player.addSystemTray(); player.boot(); } }); } public void boot() { if (config.isAutoPlayWhenStart()) { if (config.isMaintainLastPlay()) { mp.setLastRate(config.getLastRate()); } mp.pressStart(); } } public void loadJS() { BasicPlayer bplayer = new BasicPlayer(); List mixers = bplayer.getMixers(); config.setMixers(mixers); for (Object obj : mixers) { log.log(Level.INFO, "可用的MIXER:" + obj); } if (mixers != null) { Iterator it = mixers.iterator(); String mixer = config.getAudioDevice(); log.log(Level.INFO, "Config.Mixer=" + mixer); boolean mixerFound = false; if ((mixer != null) && (mixer.length() > 0)) { // Check if mixer is valid. while (it.hasNext()) { if (((String) it.next()).equals(mixer)) { bplayer.setMixerName(mixer); mixerFound = true; break; } } } if (mixerFound == false) { // Use first mixer available. it = mixers.iterator(); if (it.hasNext()) { mixer = (String) it.next(); bplayer.setMixerName(mixer); config.setAudioDevice(mixer); } } } // Register the front-end to low-level player events. bplayer.addBasicPlayerListener(mp); // Adds controls for front-end to low-level player. mp.setController(bplayer); } public void loadPlaylist() { mp.loadPlaylist(); } public void loadUI() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI(this); } catch (Exception ex) { } this.setResizable(false); config = Config.getConfig();// doTest(); config.setTopParent(this); setTitle(Config.TITLETEXT); ClassLoader cl = this.getClass().getClassLoader(); URL iconURL = cl.getResource("com/hadeslee/yoyoplayer/pic/player/icon.png"); if (iconURL != null) { ImageIcon jlguiIcon = new ImageIcon(iconURL); setIconImage(jlguiIcon.getImage()); config.setIconParent(jlguiIcon); } setUndecorated(true); mp = new PlayerUI(); mp.loadUI(this, config); setContentPane(mp); pack(); config.setPlayer(mp); eqWin = new JDialog(this); eqWin.setContentPane(mp.getEqualizerUI()); eqWin.setUndecorated(true); eqWin.pack(); eqWin.setVisible(false); config.setEqWindow(eqWin); plWin = new JDialog(this); mp.getPlaylistUI().loadUI(plWin, config); plWin.setContentPane(mp.getPlaylistUI()); plWin.setMinimumSize(mp.getPlaylistUI().getMinimumSize()); plWin.setUndecorated(true); plWin.pack(); plWin.setVisible(false); config.setPlWindow(plWin); lrcWin = new JDialog(this); mp.getLyricUI().loadUI(lrcWin, config); lrcWin.setContentPane(mp.getLyricUI()); lrcWin.setMinimumSize(mp.getLyricUI().getMinimumSize()); lrcWin.setUndecorated(true); lrcWin.pack(); lrcWin.setVisible(false); config.setLrcWindow(lrcWin); if (config.isTransparency()) { WindowUtils.setWindowTransparent(lrcWin, true); mp.getLyricUI().setBorderEnabled(config.isShowLrcBorder()); } // Window listener addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // Closing window (Alt+F4 under Win32) mp.closePlayer(); } }); addMouseMoveListener(); // Keyboard shortcut setKeyBoardShortcut(); // Display front-end setLocation(config.getXLocation(), config.getYLocation()); setVisible(true); showOtherWindow(); if (config.isStartAutoMinimize()) { minimize(); } } private void addMouseMoveListener() { DragMoveAdapter dm1 = new DragMoveAdapter(eqWin, config); mp.getEqualizerUI().addMouseListener(dm1); mp.getEqualizerUI().addMouseMotionListener(dm1); DragMoveAdapter dm = new DragMoveAdapter(this, config); mp.addMouseListener(dm); mp.addMouseMotionListener(dm); } private void showOtherWindow() { if (config.getLrcSize() != null) { lrcWin.setAlwaysOnTop(config.isLyricTopShow()); lrcWin.setSize(config.getLrcSize()); } if (config.getPlSize() != null) { plWin.setSize(config.getPlSize()); } if (config.isShowEq()) { Point p = config.getEqLocation(); if (p == null) { p = new Point(config.getXLocation(), config.getYLocation() + this.getHeight()); } eqWin.setLocation(p); eqWin.setVisible(true); } if (config.isShowPlayList()) { Point p = config.getPlLocation(); if (p == null) { p = new Point(config.getXLocation(), config.getYLocation() + this.getHeight() + eqWin.getHeight()); } plWin.setLocation(p); plWin.setVisible(true); } if (config.isShowLrc()) { Point p = config.getLrcLocation(); if (p == null) { p = new Point(config.getXLocation() + this.getWidth(), config.getYLocation()); } lrcWin.setLocation(p); lrcWin.setVisible(true); mp.getLyricUI().start(); } } private void addWindowStateListener() { this.addWindowStateListener(new WindowStateListener() { public void windowStateChanged(WindowEvent e) { int state = e.getNewState(); if (state == JFrame.ICONIFIED) { eqWin.setVisible(false); plWin.setVisible(false); if (config.isShowLrc() && config.isLyricTopShow()) { lrcWin.setVisible(true); } else { lrcWin.setVisible(false); } } else if (state == JFrame.NORMAL) { if (config.isShowEq()) { eqWin.setVisible(true); } if (config.isShowPlayList()) { plWin.setVisible(true); } if (config.isShowLrc()) { lrcWin.setVisible(true); } } } }); } /** * 设置键盘快捷键 */ public void setKeyBoardShortcut() { //B表示下一首歌曲 KeyStroke nextStroke = KeyStroke.getKeyStroke(KeyEvent.VK_B, 0, true); //空格表示播放和暂停 KeyStroke pauseStroke = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true); //C表示播放 KeyStroke playStroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, 0, true); //V表示停止 KeyStroke stopStroke = KeyStroke.getKeyStroke(KeyEvent.VK_V, 0, true); //三个快捷键,显示三个窗体 KeyStroke eqStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0, true); KeyStroke plStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0, true); KeyStroke lrcStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0, true); String nextID = "NEXT"; String pauseID = "PAUSE"; String playID = "PLAY"; String stopID = "STOP"; String eqID = "EQ"; String plID = "PL";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -