4

小さなアプリケーションをプログラムしようとしていますが、ウィンドウ全体をガラスにして、その上にボタンとラベルを付けたいと思います。Java内でこれを行うことは可能ですか?

4

3 に答える 3

8

JavaSWTとその仲間がWindowsAeroテクノロジのサポートを組み込んでいないと仮定すると、JNIを介してネイティブAPIを呼び出す必要があります。呼び出す必要のあるネイティブAPIは

DwmExtendFrameIntoClientArea(int windowHandle, MARGINS margins);

このネイティブAPIは、WindowsVistaおよびWindows7のDWMAPI.dllネイティブライブラリにあり、MSDNに記載されています

この関数を呼び出す方法については、Web上に多くのドキュメントがあります。たとえば、C#でこれを行うことに関する記事があります。それはあなたが始めるはずです。

于 2009-11-16T14:14:05.443 に答える
4

もちろん、この機能はプラットフォーム (この場合は Windows) に大きく依存するため、JNI が必要です。

ガラス ウィンドウが有効になっていることを既に確認しているとします。手順は次のとおりです。

  1. ウィンドウが階層化されていることを確認します。
  2. グラス フレームをクライアント エリアに拡張します。
  3. 透明な領域を識別する色を選択します。
  4. その色をウィンドウの背景として設定します。

手順 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 バージョンです。

于 2011-12-12T16:31:09.730 に答える
-1

うーん。すべての Java GUI は、直接的または間接的に に表示する必要があると思いますが、これWindowは重量級のコンポーネントです。透明/半透明にできるかどうかわかりません。

JFrame を作成し、その背景色をnew Color(255, 255, 255, 20)20 がアルファである程度に設定してみてください。これにより、ほとんど透過的になるか、機能しなくなります。

于 2009-11-16T13:44:34.317 に答える