JPanel%20の不透明度を表示可能にしたいとしますか? setOpaque(描画または描画しない)またはsetVisible(表示または非表示)を意味するわけではありません...それは、JPanelをシースルーにすることを意味します。
これは可能ですか?
panel.setBackground( new Color(r, g, b, a) );
これを使用するときに発生する可能性のある描画の問題を理解するには、 Backgrounds With Transparency も参照してください。
色にはアルファ属性を使用します。
例えば:
panel.setBackground(new Color(0,0,0,64));
64色のアルファ(透明度)で黒色を作成します
この結果:
これがコードです
package test;
import javax.swing.*;
import Java.awt.Color;
import Java.awt.BorderLayout;
public class See {
public static void main( String [] args ){
JFrame frame = new JFrame();
frame.setBackground( Color.orange );
frame.add( new JPanel(){{
add( new JLabel("Center"));
setBackground(new Color(0,0,0,64));
}} , BorderLayout.CENTER );
frame.add( new JLabel("North"), BorderLayout.NORTH);
frame.add( new JLabel("South"), BorderLayout.SOUTH);
frame.pack();
frame.setVisible( true );
}
}
それがなければ、次のようになります。
setBackground( new Color( 0,0,0 ) ); // or setBackground( Color.black );
AWTUtilities.setWindowOpacity(aWindow, aFloat);
ここで、aWindowはSwingコンポーネントであり、aFloatは不透明度です。
Windows 7ではうまく機能しません。
panel.setBackground( new Color(r, g, b, a) );
アルファチャネルは単に色を明るくします。
アルファチャネルのある色で要素が更新されると、コンピューターが混乱し、更新された要素の背景をアルファなしでリセットします。私はしようとしている
AWTUtilities.setWindowOpacity(aWindow, aFloat);
次。
カスタムパネルがあり、全体を半透明にしたい場合は、次のようにメソッドpaintComponentをオーバーライドすることをお勧めします。
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g2d = (Graphics2D) graphics;
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
}
JPanelのpaintComponentメソッドをオーバーライドする(これを行うには、JPanel自体をサブクラス化し、独自のpaintComponentメソッドを実装する必要があります)paintComponent内でコンポーネントのバッファリングされたイメージを取得でき、そこからアルファを操作できますバッファリングされた画像をペイントしてJPanelに戻します。私はずっと前に赤を持っています。まだコードを探しています。