2

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

4

2 に答える 2

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);
     }
}
于 2011-02-16T23:33:46.233 に答える
0

私の知る限り、あなたはこれを行うことはできません。Swing コンポーネントが上に表示されている間に AWT コンポーネントのスクリーン キャプチャを作成し、最終的にスクリーン キャプチャをときどき更新することで、より近い結果が得られます。つまり、ネイティブ コンポーネントは実際には存在せず、スクリーン キャプチャ モードでは使用できません (マウス クリックやキー イベントには応答しません)。

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

于 2011-02-22T23:11:32.217 に答える