gnometrayappletservice.java

来自「jdic,显著提高swing性能的插件」· Java 代码 · 共 272 行

JAVA
272
字号
/* * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is * subject to license terms. * * This program is free software; you can redistribute it and/or modify * it under the terms of the Lesser GNU 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. */package org.jdesktop.jdic.tray.internal.impl;import org.jdesktop.jdic.tray.internal.TrayAppletService;import sun.awt.EmbeddedFrame;import java.awt.Component;import java.awt.Graphics;import java.awt.peer.ComponentPeer;import java.awt.Toolkit;import java.awt.Frame;import java.awt.Panel;import java.awt.Dimension;import java.lang.reflect.Method;import java.lang.reflect.Constructor;import java.util.HashMap;import java.util.Iterator;/** * The <code>GnomeTrayAppletService</code> interface is the contract for a  * Gnome TrayIcon implementation. * */public class GnomeTrayAppletService implements TrayAppletService {    static HashMap winMap = new HashMap();         EmbeddedFrame frame;    ComponentPeer peer;    Panel panel;    int x;    int y;    int width;    int height;      static {    	System.loadLibrary("tray");    	GnomeSystemTrayService.initNative(System.getProperty("java.home"));    }    public GnomeTrayAppletService() {        init();    }        native long createAppletWindow();    native long getWidget(long window, int widht, int height, int x, int y);    native void adjustSizeHints (long window, int width, int height);    long window_id;       EmbeddedFrame createEmbeddedFrame(long window) {        EmbeddedFrame ef = null;        String version = System.getProperty("java.version");        String os = System.getProperty("os.name");        // System.out.println("version = " + version);        // System.out.flush();        if ((version.indexOf("1.5") == -1) || (os.equals("SunOS"))) {            // 1.4.2 or older JVM, use MAWT !            long w = getWidget(window, 400, 400, 0, 0);            // System.out.println("Widget w = " + w);            Class clazz = null;            try {                clazz = Class.forName("sun.awt.motif.MEmbeddedFrame");            } catch (Throwable e) {                e.printStackTrace();            }            Constructor constructor = null;            try {                constructor = clazz.getConstructor(new Class[] {int.class});            } catch (Throwable e1) {                try {                    constructor = clazz.getConstructor(new Class[] {long.class});                } catch (Throwable e2) {                    e1.printStackTrace();                }            }            Object value = null;            try {                value = constructor.newInstance(new Object[] {new Long(w)});            } catch (Throwable e) {                e.printStackTrace();            }            ef = (EmbeddedFrame) value;        } else {               // 1.5  JVM decide on which EmbeddedFrame to use             Toolkit toolkit = Toolkit.getDefaultToolkit();            // System.out.println("toolkit = " + toolkit);            // System.out.flush();            if (toolkit instanceof sun.awt.motif.MToolkit) {                Class clazz = null;                try {                    clazz = Class.forName("sun.awt.motif.MEmbeddedFrame");                } catch (Throwable e) {                    e.printStackTrace();                }                Constructor constructor = null;                try {                    constructor = clazz.getConstructor(new Class[] {int.class});                } catch (Throwable e1) {                    try {                        constructor = clazz.getConstructor(new Class[] {long.class});                    } catch (Throwable e2) {                        e1.printStackTrace();                    }                }                Object value = null;                try {                    value = constructor.newInstance(new Object[] {new Long(window)});                } catch (Throwable e) {                    e.printStackTrace();                }                ef = (EmbeddedFrame) value;            } else {                Class clazz = null;                try {                    clazz = Class.forName("sun.awt.X11.XEmbeddedFrame");                } catch (Throwable e) {                    e.printStackTrace();                }                Constructor constructor = null;                try {                    constructor = clazz.getConstructor(new Class[] {int.class});                } catch (Throwable e1) {                    try {                        constructor = clazz.getConstructor(new Class[] {long.class});                    } catch (Throwable e2) {                        e1.printStackTrace();                    }                }                Object value = null;                try {                    value = constructor.newInstance(new Object[] {new Long(window)});                } catch (Throwable e) {                    e.printStackTrace();                }                ef = (EmbeddedFrame) value;            }        }         return ef;     }    void init() {        window_id = createAppletWindow();         // System.out.println("init: window " + window_id );        // Add a mapping in the window map.        synchronized (winMap) {            winMap.put(new Long(window_id), this);        }        frame = createEmbeddedFrame(window_id);        peer = frame.getPeer();        width = 40;        height = 46;        frame.setSize(width, height);        frame.setVisible(true);                }    long getWindow() {        return window_id;    }    EmbeddedFrame getFrame() {        return frame;    }    public void add(Component a) {        frame.add(a);    }    public Graphics getGraphics() {        return frame.getGraphics();    }    public void   	setVisible(boolean b) {        frame.setVisible(b);    }    public void  reshape(int x, int y, int width, int height) {        adjustSizeHints(getWindow(),width,height);        frame.reshape(x, y, width, height);    }    public ComponentPeer getPeer() {        return peer;    }    void configureWindow(int x, int y, int w, int h) {        this.x = x;        this.y = y;        this.width = w;        this.height = h;        frame.setSize(width, height);        frame.validate();     //   System.out.println("configureWindow: frame = " + frame + " configure width = " + width + " height = " + height);    }    public Dimension getAppletSize() {        return new Dimension(width, height);    }    static void configureNotify(long window, int x, int y, int w, int h) {        GnomeTrayAppletService gas;       //  System.out.println("configureNotify: window =" + window );        synchronized (winMap) {            gas = (GnomeTrayAppletService) winMap.get(new Long(window));        }        if (gas != null) {            gas.configureWindow(x, y, w, h);        }    }       public void remove() {        // remove mapping in the window map.        synchronized (winMap) {            winMap.remove(new Long(getWindow()));        }        frame.dispose();        dispose(getWindow());    }    static {        Runtime.getRuntime().addShutdownHook(new Thread() {            public void run() {            	Iterator wins = winMap.keySet().iterator();            	while(wins.hasNext())            		dispose(((Long)wins.next()).longValue());            }        });    }      static native void dispose(long window_id);}

⌨️ 快捷键说明

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