2009-07-29 13 views
3

this記事from sun。透明なウィンドウを作成しようとしています。AWTUtilities透明なJFrame

フレームのラベルの内側に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(); 
} 

を使用する場合

それは透明everthingが透明でないコンポーネントを維持することが可能であることができます。

答えて

1

フレームの背景色のアルファチャンネルを設定するだけで、コンポーネントに降りてはいけません。

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

には、白い透明なウィンドウが表示されます。

+1

ありがとうございます!これは私のためにうまくいく... Mac OS Xで。他のプラットフォームでも動作するの?透明なウィンドウのことを研究するにあたり、他のプラットフォームでは他の技術が必要であると言う記事がいくつか見つかりました。 http://explodingpixels.wordpress.com/2009/06/19/hud-on-windows-finally/ – slothbear

0

あなたは、子要素の不透明度、枠が不透明にすることなく、それらが不透明になります

childComponent.setOpaque(true); 

のようなものを設定する必要があります。

1

AWTUtilitiesクラスを使用することはできますが、setWindowOpacity()、setWindowOpaque()で不透明度を設定することはできません。これによりウィンドウの背景が消えますが、ウィンドウ内に描画するものは以前と同じように描画されます。最近のJava 6アップデートでは、これが正しい方法です。 AWTUtilitiesはMac & MS Windowsで動作します。これらのメソッドは、Java 7でjava.awt.Window自体に移されます。

0

私は以下のように以前の答えを拡張したいと思います。これにより、0.05の透明度または255のうち12.75のウィンドウが作成されます。コンポーネントは0.50の透明度に設定されます。これはクリック可能なコンポーネントにのみ影響します。ラベルのようなクリック不可能なものは、透明性をこれまでのものに設定できます。しかしこれは、色を変えるクリック可能なコンポーネントの問題にパッチを当てます。

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);