3

太陽からこの記事を使用します。透明なウィンドウを作成しようとしています。

フレームのラベルの中に1つの画像があります。画像は表示したいのですが、フレームは非表示にします。

使うとき


try {
   Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
   Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
   mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
} catch (NoSuchMethodException ex) {
   ex.printStackTrace();
} catch (SecurityException ex) {
   ex.printStackTrace();
} catch (ClassNotFoundException ex) {
   ex.printStackTrace();
} catch (IllegalAccessException ex) {
   ex.printStackTrace();
} catch (IllegalArgumentException ex) {
   ex.printStackTrace();
} catch (InvocationTargetException ex) {
   ex.printStackTrace();
}

これにより、すべてが透明になり、コンポーネントを透明に保つことができます。

4

4 に答える 4

1

AWTUtilitiesクラスは引き続き使用できますが、setWindowOpacity()setWindowOpaque()で不透明度を設定する代わりに使用できます。これによりウィンドウの背景がオフになりますが、ウィンドウ内に描画したものはすべて以前と同じように描画されます。最近のJava6アップデートの時点で、これが正しい方法になっています。AWTUtilitiesは、MacとMSWindowsの両方で動作します。これらのメソッドは、Java7のjava.awt.Window自体に移動されます。

于 2010-12-01T03:56:40.730 に答える
1

フレームの背景色にアルファチャンネルを設定してみてください。これはコンポーネントに降りてはいけません。

window.setBackground(new Color(1.0, 1.0, 1.0, 0.25));

白くて透明なウィンドウが表示されます。

于 2009-07-29T16:54:57.190 に答える
0

以前の回答を次のように拡張したいと思います。これにより、透明度が0.05、または255のうち12.75のウィンドウが作成されます。次に、コンポーネントが0.50fの透明度に設定されます。これは、クリック可能なコンポーネントにのみ影響します。ラベルのようにクリックできない場合は、透明度をこれまでに設定できます。ただし、これにより、色が変わるクリック可能なコンポーネントの問題が修正されます。

JWindow subFrame = new JWindow();           
subFrame.setBounds(0, 0, 500, 500);
subFrame.setAlwaysOnTop(true);
subFrame.setOpacity(0.50f);
subFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.05f));

JButton button = new JButton("Hello");
button.setBounds(20, 180, 100, 40);

subFrame.getContentPane().setLayout(null);
subFrame.getContentPane().add(button);
subFrame.setVisible(true);
于 2012-10-05T17:33:26.623 に答える
0

子コンポーネントの不透明度を次のように設定する必要があります

childComponent.setOpaque(true);

これにより、フレームが不透明になることなく、不透明になります。

于 2009-07-29T16:59:08.040 に答える