Java - 在JPanel中设置不透明度

时间:2010-08-25 01:27:24

标签: java jpanel opacity

假设我想让JPanel%20的不透明度可见?我不是指setOpaque(绘制或不绘制)或setVisible(显示或隐藏)......我的意思是让它透视JPanel ..你知道吗?

这可能吗?

6 个答案:

答案 0 :(得分:22)

panel.setBackground( new Color(r, g, b, a) );

您还应该查看Backgrounds With Transparency以了解使用此功能时可能遇到的任何绘画问题。

答案 1 :(得分:13)

使用颜色的alpha属性。

例如:

panel.setBackground(new Color(0,0,0,64));

将创建一个黑色,带有64个alpha(透明度)

导致:

sample

这是代码

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 );

alt text

答案 2 :(得分:3)

AWTUtilities.setWindowOpacity(aWindow, aFloat);

其中aWindow是Swing组件,而aFloat是不透明度。

答案 3 :(得分:0)

如何在paintComponent中覆盖JPanel的paintComponent方法(为了做到这一点你必须子类化JPanel本身并实现自己的paintComponent方法),你可以检索组件的缓冲图像,从那里你可以操纵缓冲图像的alpha并将其绘制回JPanel。我很久以前就红了。仍在寻找代码。

答案 4 :(得分:0)

它在Windows 7上运行得不好。

panel.setBackground( new Color(r, g, b, a) );

alpha通道只是淡化颜色。

当使用Alpha通道在颜色上更新元素时​​,计算机会混淆并重置更新元素的背景而不使用alpha。我打算试试

AWTUtilities.setWindowOpacity(aWindow, aFloat);

下。

答案 5 :(得分:0)

如果你有一个自定义面板并希望整个事物是半透明的,我建议你像这样覆盖它的方法paintComponent:

@Override
    protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        Graphics2D g2d = (Graphics2D) graphics;
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    }