小さなアプリケーションをプログラムしようとしていますが、ウィンドウ全体をガラスにして、その上にボタンとラベルを付けたいと思います。Java内でこれを行うことは可能ですか?
3 に答える
JavaSWTとその仲間がWindowsAeroテクノロジのサポートを組み込んでいないと仮定すると、JNIを介してネイティブAPIを呼び出す必要があります。呼び出す必要のあるネイティブAPIは
DwmExtendFrameIntoClientArea(int windowHandle, MARGINS margins);
このネイティブAPIは、WindowsVistaおよびWindows7のDWMAPI.dllネイティブライブラリにあり、MSDNに記載されています。
この関数を呼び出す方法については、Web上に多くのドキュメントがあります。たとえば、C#でこれを行うことに関する記事があります。それはあなたが始めるはずです。
もちろん、この機能はプラットフォーム (この場合は Windows) に大きく依存するため、JNI が必要です。
ガラス ウィンドウが有効になっていることを既に確認しているとします。手順は次のとおりです。
- ウィンドウが階層化されていることを確認します。
- グラス フレームをクライアント エリアに拡張します。
- 透明な領域を識別する色を選択します。
- その色をウィンドウの背景として設定します。
手順 1 ~ 3 は C で記述されています。HWND hwnd
ガラス化するウィンドウのハンドルを指定しCOLORREF color
、色を指定します (珍しいほど良い):
// 1.
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
// 2.
MARGINS margins = {-1, -1, -1, -1};
DwmExtendFrameIntoClientArea(hwnd, &margins);
// 3.
SetLayeredWindowAttributes(hwnd, color, 0, LWA_COLORKEY);
ステップ4は単純なJavaで、次のようなものです
window.getContentPane().setBackground(color);
はcolor
、前に選択した色の Java バージョンです。
うーん。すべての Java GUI は、直接的または間接的に に表示する必要があると思いますが、これWindow
は重量級のコンポーネントです。透明/半透明にできるかどうかわかりません。
JFrame を作成し、その背景色をnew Color(255, 255, 255, 20)
20 がアルファである程度に設定してみてください。これにより、ほとんど透過的になるか、機能しなくなります。