/* * To change this template, choose Tools | Templates * and open the template in the editor. */ import java.awt.GraphicsConfiguration; import java.awt.Shape; import java.awt.Window; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Anthony Petrov */ public class AWTUtilitiesWrapper { private static Class<?> awtUtilitiesClass; private static Class<?> translucencyClass; private static Method mIsTranslucencySupported, mIsTranslucencyCapable, mSetWindowShape, mSetWindowOpacity, mSetWindowOpaque; public static Object PERPIXEL_TRANSPARENT, TRANSLUCENT, PERPIXEL_TRANSLUCENT; static void init() { try { awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); translucencyClass = Class.forName("com.sun.awt.AWTUtilities$Translucency"); if (translucencyClass.isEnum()) { Object[] kinds = translucencyClass.getEnumConstants(); if (kinds != null) { PERPIXEL_TRANSPARENT = kinds[0]; TRANSLUCENT = kinds[1]; PERPIXEL_TRANSLUCENT = kinds[2]; } } mIsTranslucencySupported = awtUtilitiesClass.getMethod("isTranslucencySupported", translucencyClass); mIsTranslucencyCapable = awtUtilitiesClass.getMethod("isTranslucencyCapable", GraphicsConfiguration.class); mSetWindowShape = awtUtilitiesClass.getMethod("setWindowShape", Window.class, Shape.class); mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class); mSetWindowOpaque = awtUtilitiesClass.getMethod("setWindowOpaque", Window.class, boolean.class); } catch (NoSuchMethodException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } catch (SecurityException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } } static { init(); } private static boolean isSupported(Method method, Object kind) { if (awtUtilitiesClass == null || method == null) { return false; } try { Object ret = method.invoke(null, kind); if (ret instanceof Boolean) { return ((Boolean) ret).booleanValue(); } } catch (IllegalAccessException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalArgumentException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } catch (InvocationTargetException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } return false; } public static boolean isTranslucencySupported(Object kind) { if (translucencyClass == null) { return false; } return isSupported(mIsTranslucencySupported, kind); } public static boolean isTranslucencyCapable(GraphicsConfiguration gc) { return isSupported(mIsTranslucencyCapable, gc); } private static void set(Method method, Window window, Object value) { if (awtUtilitiesClass == null || method == null) { return; } try { method.invoke(null, window, value); } catch (IllegalAccessException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalArgumentException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } catch (InvocationTargetException ex) { Logger.getLogger(AWTUtilitiesWrapper.class.getName()).log(Level.SEVERE, null, ex); } } public static void setWindowShape(Window window, Shape shape) { set(mSetWindowShape, window, shape); } public static void setWindowOpacity(Window window, float opacity) { set(mSetWindowOpacity, window, Float.valueOf(opacity)); } public static void setWindowOpaque(Window window, boolean opaque) { set(mSetWindowOpaque, window, Boolean.valueOf(opaque)); } }