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

📄 util.java

📁 java+eclipse做的TTPlayer
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.hadeslee.yoyoplayer.util;import com.hadeslee.yoyoplayer.lyric.*;import com.hadeslee.yoyoplayer.playlist.PlayListItem;import com.hadeslee.yoyoplayer.setting.OptionDialog;import com.hadeslee.yoyoplayer.setting.SettingPanel;import com.sun.jna.examples.WindowUtils;import java.awt.Color;import java.awt.Cursor;import java.awt.Desktop;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.URL;import java.net.URLEncoder;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List;import java.util.Properties;import java.util.logging.Level;import java.util.logging.Logger;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JDialog;import javax.swing.JFileChooser;import javax.swing.JMenu;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JRadioButtonMenuItem;import javax.swing.JToggleButton;import javax.swing.event.ChangeListener;import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.URI;import org.apache.commons.httpclient.UsernamePasswordCredentials;import org.apache.commons.httpclient.auth.AuthScope;import org.apache.commons.httpclient.methods.GetMethod;/** * 一个工具类,主要负责分析歌词 * 并找到歌词下载下来,然后保存成标准格式的文件 * 还有一些常用的方法 * @author hadeslee */public final class Util {    public static String VERSION = "1.1.3";//版本号,用于对比更新    private static Logger log = Logger.getLogger(Util.class.getName());    private static final JPanel panel = new JPanel();    private static final JFileChooser jfc = new JFileChooser();    private Util() {    }    /**     * 检查更新新的一个很方便的方法,     * 很多地方都可以调用到此方法,并且此方法     * 负责弹出对话框让用户选择或者其它一些实现     * @param ver 得到的版本对象     */    public static void checkUpdate(Version remote) {        if (remote != null && remote.getVersion() != null) {            if (Util.canUpdate(remote.getVersion())) {                int i = JOptionPane.showConfirmDialog(null, Config.getResource("Util.currentVersion") + Util.VERSION + "\n" +                        Config.getResource("Util.remoteVersion") + remote.getVersion() + "\n" +                        Config.getResource("Util.versionDescription") + remote.getDescription() + Config.getResource("Util.areyouupdate"), Config.getResource("Util.hasUpdate"), JOptionPane.YES_NO_OPTION);                if (i == JOptionPane.YES_OPTION) {                    try {                        Desktop.getDesktop().browse(new java.net.URI(remote.getUrl()));                    } catch (Exception ex) {                        Logger.getLogger(SettingPanel.class.getName()).log(Level.SEVERE, null, ex);                    }                }            } else {                JOptionPane.showMessageDialog(null, Config.getResource("Util.currentVersion") + Util.VERSION + "\n" +                        Config.getResource("Util.remoteVersion") + remote.getVersion() + Config.getResource("Util.noUpdate"));            }        }    }    /**     * 根据远程取到的版本和现在的版本对比     * 看能不能更新     * @param version 远程的版本     * @return 能不能更新     */    private static boolean canUpdate(String version) {        if (version == null) {            return false;        }        return VERSION.compareTo(version) < 0;    }    public static boolean voteOpen() {        try {            HttpClient http = new HttpClient();            http.getParams().setContentCharset("GBK");            GetMethod get = new GetMethod("http://www.blogjava.net/Files/hadeslee/voteOpen.zip");            get.addRequestHeader("Host", "www.blogjava.net");            get.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");            get.addRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");            get.addRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");            get.addRequestHeader("Accept-Charset", "x-gbk,utf-8;q=0.7,*;q=0.7");            get.addRequestHeader("Connection", "keep-alive");            get.addRequestHeader("Referer", "http://www.blogjava.net/hadeslee");            int i = http.executeMethod(get);            get.releaseConnection();            return true;        } catch (IOException ex) {            return false;        }    }    public static boolean voteOneHour() {        try {            HttpClient http = new HttpClient();            http.getParams().setContentCharset("GBK");            GetMethod get = new GetMethod("http://www.blogjava.net/Files/hadeslee/voteOneHour.zip");            get.addRequestHeader("Host", "www.blogjava.net");            get.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");            get.addRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");            get.addRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");            get.addRequestHeader("Accept-Charset", "x-gbk,utf-8;q=0.7,*;q=0.7");            get.addRequestHeader("Connection", "keep-alive");            get.addRequestHeader("Referer", "http://www.blogjava.net/hadeslee");            int i = http.executeMethod(get);            get.releaseConnection();            return true;        } catch (IOException ex) {            return false;        }    }    /**     * 得到远程的版本的方法,返回一个字符串,     * 格式为x.x.x然后再用方法做为比较     * 版本的信息从哪里取的问题,一般版本的信息URL     * 也是写在本类里面,因为所有的程序中,最有可能更新的就是     * 本类,因为本类搜索歌词的代码可能会要改动     * 因为可能网站会变化     * @return 远程的版本对象     */    public static Version getRemoteVersion() {        try {            HttpClient http = new HttpClient();            http.getParams().setContentCharset("GBK");            GetMethod get = new GetMethod("http://www.blogjava.net/Files/hadeslee/version.zip");            get.addRequestHeader("Host", "www.blogjava.net");            get.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11");            get.addRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");            get.addRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");            get.addRequestHeader("Accept-Charset", "x-gbk,utf-8;q=0.7,*;q=0.7");            get.addRequestHeader("Connection", "keep-alive");            get.addRequestHeader("Referer", "http://www.blogjava.net/hadeslee");            int i = http.executeMethod(get);            ZipInputStream zip = new ZipInputStream(get.getResponseBodyAsStream());            ZipEntry entry = zip.getNextEntry();            Properties pro = new Properties();            pro.load(zip);            String version = pro.getProperty("Version");            String url = pro.getProperty("URL");            String des = pro.getProperty("Description");            log.log(Level.INFO, "RemoteVersion=" + version);            get.releaseConnection();            return new Version(version, url, des);        } catch (IOException ex) {            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);            return null;        }    }    /**     * 一个简便的生成一系列渐变颜色的方法,一般是生成128     * 个颜个,供可视化窗口用     * @param c1 第一种颜色     * @param c2 第二种颜色     * @param c3 第三种颜色     * @param count 生成几种颜色     * @return 渐变色     */    public static Color[] getColors(Color c1, Color c2, Color c3, int count) {        Color[] cs = new Color[count];        int half = count / 2;        float addR = (c2.getRed() - c1.getRed()) * 1.0f / half;        float addG = (c2.getGreen() - c1.getGreen()) * 1.0f / half;        float addB = (c2.getBlue() - c1.getBlue()) * 1.0f / half;//        log.log(Level.INFO, "addR="+addR+",addG="+addG+",addB="+addB);        int r = c1.getRed();        int g = c1.getGreen();        int b = c1.getBlue();        for (int i = 0; i < half; i++) {            cs[i] = new Color((int) (r + i * addR), (int) (g + i * addG), (int) (b + i * addB));//            log.log(Level.INFO, "cs["+i+"]="+cs[i]);        }        addR = (c3.getRed() - c2.getRed()) * 1.0f / half;        addG = (c3.getGreen() - c2.getGreen()) * 1.0f / half;        addB = (c3.getBlue() - c2.getBlue()) * 1.0f / half;        r = c2.getRed();        g = c2.getGreen();        b = c2.getBlue();        for (int i = half; i < count; i++) {            cs[i] = new Color((int) (r + (i - half) * addR), (int) (g + (i - half) * addG), (int) (b + (i - half) * addB));//            log.log(Level.INFO, "cs["+i+"]="+cs[i]);        }        return cs;    }    /**     * 根据特定的颜色生成一个图标的方法     * @param c 颜色     * @param width 宽度     * @param height 高度     * @return 图标     */    public static ImageIcon createColorIcon(Color c, int width, int height) {        BufferedImage bi = createImage(c, width, height);        return new ImageIcon(bi);    }    /**     * 根据特定的颜色,生成这个颜色的一张图片     * 一般用于显示在图片按钮上做为ICON的     * @param c 颜色     * @param width 图片的宽度     * @param height 图片的高度     * @return 生成的图片     */    public static BufferedImage createImage(Color c, int width, int height) {        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);        Graphics2D g = bi.createGraphics();        g.setColor(c);        g.fillRect(0, 0, width, height);        g.setColor(new Color(128, 128, 128));        g.drawRect(0, 0, width - 1, height - 1);        g.setColor(new Color(236, 233, 216));        g.drawRect(1, 1, width - 3, height - 3);        return bi;    }    /**     * 快速地生成歌词秀上下文菜单的方法     * @param pop 菜单      * @param lp 歌词面板     */    public static void generateLyricMenu(JMenu pop, final LyricPanel lp) {        final Config config = Config.getConfig();        JMenu adjust = new JMenu(Config.getResource("Util.adjustLyric"));        JMenu showType = new JMenu(Config.getResource("Util.displayMode"));//        JMenu set = new JMenu("设置");        adjust.add(Config.getResource("Util.ff0.5")).addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                lp.getLyric().adjustTime(-500);            }        });        adjust.add(Config.getResource("Util.ss0.5")).addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                lp.getLyric().adjustTime(500);            }        });        adjust.add(Config.getResource("Util.adjustAll")).addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                String s = JOptionPane.showInputDialog(Config.getResource("Util.inputAdjustTime") +                        Config.getResource("Util.adjustTip"));                if (s != null) {                    try {                        int time = Integer.parseInt(s);                        lp.getLyric().adjustTime(time);                    } catch (Exception exe) {                    }                }            }        });        adjust.addSeparator();        final JCheckBoxMenuItem check = new JCheckBoxMenuItem(Config.getResource("Util.mouseWheelAdjust"));        check.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent ae) {                config.setMouseScrollAjustTime(check.isSelected());            }        });        check.setSelected(config.isMouseScrollAjustTime());        adjust.add(check);        pop.add(Config.getResource("lyric.hideLyric")).addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent ae) {                lp.hideMe();            }        });        pop.add(Config.getResource("Util.searchOnline")).addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent ae) {                new WebSearchDialog(lp.getPlayer().getCurrentItem(), lp).setVisible(true);            }        });

⌨️ 快捷键说明

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