2011-02-04 22 views
2

AWTコンポーネント(サードパーティライブラリ)があり、その上に半透明のパネル(この場合はアルファベットの128)を表示してマスクする必要があります。これを行う方法はありますか?私はSunのAWTUtilitiesクラスを使用する "TransparentPanel"クラスを見てきましたが、それは0 <アルファベット< 255のピクセルを表示できないという制限があります。それがかなり解決策ではないとしても、これを行う。AWTコンポーネントの半透明パネル

+0

試したTransparentPanelクラスへのリンクを投稿できますか? – finnw

+0

http://today.java.net/article/2009/11/02/transparent-panel-mixing-heavyweight-and-lightweight-components –

答えて

1

おそらく、半透明塗料を備えたGlassPaneでこれを解決できます。ここに簡単な例があります:

import java.awt.Color; 
import java.awt.GradientPaint; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Paint; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class GlassFrame extends JComponent 
{ 
    public GlassFrame() 
    { 
     super(); 
    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D)g.create(); 

     Paint p = new GradientPaint(
       0, 0, new Color(200,180,180,200), //Select RGB and Alpha values 
       getWidth(), 0, new Color(0,0,0,0) 
      ); 
     g2.setPaint(p); 
     g2.fillRect(0, 0, getWidth(), getHeight()); 

     g2.dispose(); 
    } 

    public static void main(String args[]) 
    { 
     JFrame jf = new JFrame("Simple test"); 
     jf.add(new JPanel()); 
     GlassFrame g = new GlassFrame(); 

     jf.setSize(300,300); 
     jf.setVisible(true); 

     jf.setGlassPane(g); 
     g.setVisible(true); 
    } 
} 
+0

残念ながら、私はAWTコンポーネントを下に持っているので、これはうまくいきません私が使用しているサードパーティのライブラリのためです)。 –

0

私が知る限り、これはできません。近づくと、スイングコンポーネントが上に表示されている間にAWTコンポーネントのスクリーンキャプチャを作成し、最終的にスクリーンキャプチャをリフレッシュします。つまり、ネイティブコンポーネントは実際には存在せず、画面キャプチャモード(マウスのクリックやキーイベントに応答しない)では使用できません。

これは、DJ NativeSwingの例の1つで、埋め込みWebブラウザの上にアルファ透明度を持つSwing PNG画像をオーバーレイするものです。デモを確認してください:http://djproject.sourceforge.net/ns

関連する問題