trayiconutil.java

来自「java实现windows托盘(加载dll)(精简版)」· Java 代码 · 共 112 行

JAVA
112
字号
import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*;import java.io.*;//有参考网上找到的资料public class TrayIconUtil{    private JPopupMenu rightPopup;    private JWindow popupWindow;    private JFrame mainFrame;    private static TrayIconUtil staticInstance;    private TrayIconUtil(){}    public static TrayIconUtil getDefaultTrayIconUtil(){        if(staticInstance == null){            staticInstance = new TrayIconUtil();            staticInstance.initTrayIcon(staticInstance,"JavaTrayIconApp",1000);        }        return staticInstance;    }    private void setMainJFrame(final JFrame frame){        this.mainFrame=frame;        frame.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                closeTrayIcon();            }            public void windowIconified(WindowEvent e) {                frame.setVisible(false);            }            public void windowDeactivated(WindowEvent e) {                if(rightPopup!=null)                    rightPopup.setVisible(false);            }        });    }    public void setTrayIconJPopupMenu(JPopupMenu popup){        this.rightPopup=popup;        rightPopup.show(getPopupWindow(),0,0);        rightPopup.setVisible(false);    }    private void processTrayIconMouseEvent(int button,int x,int y){        if(button == -1)return;//mouse over.        if(button == 0 ||button ==5 ||button == 7){            if(rightPopup != null && button == 5){                rightPopup.show(getPopupWindow(),x,y);                rightPopup.requestFocus();                rightPopup.repaint();            }        }else{            if(button == 3){                if(rightPopup!=null)                    rightPopup.setVisible(false);                if(!mainFrame.isVisible()){                    mainFrame.setVisible(true);                    mainFrame.toFront();                    mainFrame.requestFocus();                    if(mainFrame.isVisible()){                        if(mainFrame.getExtendedState()==JFrame.ICONIFIED){                            mainFrame.setExtendedState(JFrame.NORMAL);                        }                    }                }else{                    mainFrame.setVisible(false);                }            }        }    }    private Window getPopupWindow(){        if(popupWindow == null){            popupWindow = new JWindow();            popupWindow.setBounds(0,0,1,1);            popupWindow.show();        }        return popupWindow;    }    private boolean isFirst=true;    public void initTrayIcon(String tip,File iconfile,JFrame frame,JPopupMenu popup){        if(isFirst){            if(iconfile!=null){                ImageIcon icon=new ImageIcon(iconfile.getAbsolutePath());                int w=icon.getIconWidth(),h=icon.getIconHeight();                Image image=icon.getImage();                try {                    int[] pixels = new int[w * h];                    PixelGrabber pg = new PixelGrabber(image, 0, 0, w, h, pixels, 0, w);                    pg.grabPixels();                    if ((pg.getStatus() & ImageObserver.ABORT) != 0) {                        throw new Exception("Error loading icon image");                    }                    setTrayIconData(w, h, pixels);                } catch (Exception ex) {                    ex.printStackTrace();                }            }            if(tip!=null){                setTrayIconTip(tip);            }            setTrayIconJPopupMenu(popup);            setMainJFrame(frame);            isFirst=false;        }    }    private native void initTrayIcon(TrayIconUtil instance,String appName,int id);    private native void setTrayIconTip(String tip);    private native void setTrayIconData(int w, int h, int pixels[]);    public native void showTrayIcon();    public native void closeTrayIcon();    static{        System.loadLibrary("TrayIcon");    }}

⌨️ 快捷键说明

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