JAVAで透過するウィンドウや、独自シェイプのウィンドウを作成する方法のメモ。
ただし、すべての環境でできるわけではないので注意。
(すべての環境でこれを実現するには、Robotを使って画面をキャプチャしてから、その上に自分で作成していくなどの方法が必要になる。)
基本的に、詳しい説明は以下のサイトにあるのでそちらで
http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/
さて、この方法をEclipse上で開発を行っていると、
「アクセス制限: 型 AWTUtilities は必須ライブラリー C:\Program Files\Java\jre6\lib\rt.jar で制限されているためアクセスできません」
とエラーになってしまい使えません。
でも、これを以下のようにして強制的に使ってしまいます。
import org.apache.commons.lang.reflect.MethodUtils;
:
Class clz = Class.forName("com.sun.awt.AWTUtilities");
if(clz != null){
try{
Object[] args1 = {frame,bg};
Class[] types1 = {Window.class,Shape.class};
MethodUtils.invokeExactStaticMethod(clz, "setWindowShape",args1,types1);
Object[] args2 = {frame,0.8f};
Class[] types2 = {Window.class,float.class};
MethodUtils.invokeExactStaticMethod(clz, "setWindowOpacity", args2,types2);
}
catch(Exception ex){}
こんな感じにReflectionを使ってしまいます。
ただし、Reflectもすべて自前で行ってもそれほど面倒でもないのですが、
ここでは、ほかの理由もあってすでにApache commonsのlangライブラリを使っていたので、そちらを使いました。


