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 + -
显示快捷键?