2012-05-05 19 views
1

私は、Javaウィンドウを透明にすることに成功しましたが、それらのウィンドウの上に不透明なコンポーネントを重ね合わせるのに問題があります。 JFrame.setOpacity(0)およびAWTUtilities setWindowOpacityはすべて、構成要素への透過性を転送します。さらに、JFrame.setBackground(0,0,0,0)は、何らかの形で前記コンポーネントへの透明度を奪います。透明なJavaウィンドウ上の不透明なコンポーネント

どうすればこの問題を解決できますか?

テストクラス:透明な背景、setOpacity、およびAWTUtility、それぞれ

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import java.awt.Color; 

public class test { 
public static void main(String[] args){ 
JFrame frame = new JFrame("test"); 
JLabel label = new JLabel("Label text"); 
frame.setUndecorated(true); 
frame.setBackground(new Color(0,0,0,128)); 
frame.add(label); 
frame.pack(); 
frame.setVisible(true); 
} 
} 


public class test2 { 

public static void main(String[] args){ 
JFrame frame = new JFrame("test"); 
JLabel label = new JLabel("Label text"); 
frame.setUndecorated(true); 
frame.setOpacity(.50f); 
frame.add(label); 
frame.pack(); 
frame.setVisible(true); 
} 
} 


import com.sun.awt.AWTUtilities; 
import java.lang.reflect.Method; 
import java.awt.Window; 

public class test3 { 
public static void main(String[] args){ 
JFrame frame = new JFrame("test"); 
JLabel label = new JLabel("Label text"); 
frame.setUndecorated(true); 

try { 
Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); 
Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class); 
mSetWindowOpacity.invoke(null, frame, Float.valueOf(0.50f)); 
} catch (Exception x){}  

frame.add(label); 
frame.pack(); 
frame.setVisible(true); 
} 
} 

EDIT:「私はそれが動作するWindowsの、上(0,0,0,0)setBackgroundを試みたが、それはdoesnのLinux(xfce)で正しく動作します。

+0

をよりよいヘルプについてはすぐに、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

0

AWTUtilties.setOpaque(Window、boolean)を使用すると、必要なものを取得できます。ここで(赤色の背景を有する)半透明なラベルの例である:ここで

import java.awt.Color; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

import com.sun.awt.AWTUtilities; 

public class Test3 { 

    protected static void initUI() { 
     JFrame frame = new JFrame("test"); 
     JLabel label = new JLabel("Label text"); 
     label.setOpaque(true); 
     label.setBackground(new Color(255, 0, 0, 128)); 
     frame.setUndecorated(true); 

     AWTUtilities.setWindowOpaque(frame, false); 
     frame.add(label); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       initUI(); 
      } 
     }); 
    } 
} 

は(白い背景上に作ら)アルファシャネルのための異なる値を持ついくつかのスクリーンショットである。

アルファに設定128(半透明):

Half-transparent label

アルファは0(完全に透明)に設定

アルファは、(完全に不透明)255に設定:

Completely opaque

+0

私のコンピュータでは、アルファベットを0に設定しても、この例のラベルは部分的に透明です。私は何か動作するように見えることができない、と私はそれが私が使用しているプラ​​ットフォームのためだと思うようになってきている。 – septette

+0

@septetteバックグラウンドカラーのアルファ値が異なる値に設定された別のスクリーンショットで投稿を更新しました。私の設定(ここ)はJDK7を使ったWinXPです(しかし、私はそれがJDK6、少なくとも最新のバージョンで動作すると確信しています) –