0

以下は、コンテンツ ペインを透明にするために使用しているコードです。「setBackground(new Color(0,0,0,0));」という行をコメントアウトすると、ウィンドウがグラデーションカラーとその不透明でペイントされています。ただし、上記のコード行を使用すると透明になります。

この「setBackground(new Color(0,0,0,0));」とJPanelに設定しているグラデーションカラーとの関係は誰にでもわかります。事前にサンクス。

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsDevice.WindowTranslucency;
import java.awt.GraphicsEnvironment;
import java.awt.Paint;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class transparent extends JFrame {

public transparent() {
    super("Transparent Window");

    setBackground(new Color(0,0,0,0));//problem with this line

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,200);
    getContentPane().setLayout(new FlowLayout());

    JPanel jp=new JPanel(){
        public void paintComponent(Graphics g)
        {
            //super.paintComponent(g);
            Graphics2D g2=(Graphics2D)g;
            Paint gp=new GradientPaint(300, 700, new Color(20,20,210,0), 100, 00, new Color(10,20,40,255));
            g2.setPaint(gp);
            g2.fillRect(0, 0, getWidth(),getHeight());
        }
    };

    setContentPane(jp);
    JButton jbtn=new JButton("Enter");
    add(jbtn);
    setVisible(true);

}
public static void main(String[] args) {
    // TODO Auto-generated method stub

    JFrame.setDefaultLookAndFeelDecorated(true);

    SwingUtilities.invokeLater(new Runnable(){public void run(){new transparent();}});
}

}
4

1 に答える 1

2

色 (0,0,0,0) は、アルファ コンポーネント (Color コンストラクターの 4 番目のパラメーター) がゼロに設定されたすべての色と同様に、完全に透明です。

http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(int, int, int, int)

public Color(int r, int g, int b, int a)    

指定された赤、緑、青、およびアルファ値の範囲 (0 ~ 255) で sRGB カラーを作成します。 パラメータ:
r - 赤の成分
g - 緑の成分
b - 青の成分
a - アルファ成分

http://en.wikipedia.org/wiki/Alpha_compositing

コンピュータ グラフィックスにおけるアルファ合成は、イメージを背景と組み合わせて、部分的または完全な透明の外観を作成するプロセスです。

これを背景にするとフレームが透明になります!フレームが透明でない場合、上部に透明なパネルがあると、このパネルを通して下のフレームしか見えないため、これは非常に重要です。フレームを透明にすることで、背後にあるものが透けて見えるようになります。

于 2012-08-07T10:36:27.573 に答える