Java7でやり方が変わりました。記事
この記事はJRE1.6での内容になります。
知らなかった。JAVAのJFrameは半透明にならないってずっと思っていたよ。
上の図はJDialog(を拡張したクラス)を半透明で表示したところです。
シンプルだけど格好よくね?
ただ、Windowsで起動すると途端にださくなりますが
こんな感じ
JDialog d = new JDialog();
d.setUndecorated(true);//下のsetWindowOpaqueはウィンドウ装飾をなくしておかないとエラーになる。
AWTUtilities.setWindowOpaque(d, false);
JPanel p = new JPanel();
d.add(p);
p.setBackground(new Color(0xa0000000,true));//ちょっと透明な黒色に背景を設定
ウィンドウ全部を半透明にしたいときは
AWTUtilities.setWindowOpacity(d, 0.5f);
半透明に出来るのは08年ぐらいからで割と最近になってかららしく、古いJAVAVM使っている人は動かない。
How to Create Translucent and Shaped Windowsに書いてあったことをやったみただけなので、基本的なことはこれ読んでくれい。
あと、非矩形ウィンドウの作り方も載っています。
ただ、試した限りではWindowsとMacでの挙動に差があったので両方でのデバッグが必要。Write Once, Run Anywhereの精神なんて気にするな。
あと、上の図ではJTextFieldが載っかってるけど、Macではこれで何ともないのだが、Windows環境下では、何故か全角文字を入力すると表示がバグる。
仕様がないので、JTextFieldにInputMethodListenerをつけて、ウィンドウをrepaint()させることで何とか表示がバグるのを防いだ。