Java-在JPanel中设置不透明度

Java-在JPanel中设置不透明度,java,jpanel,opacity,Java,Jpanel,Opacity,假设我想使JPanel%20的不透明度可见?我不是指setOpaque(绘制或不绘制)或setVisible(显示或隐藏)。。。我的意思是让它看穿JPanel。。你知道吗 这可能吗 AWTUtilities.setWindowOpacity(aWindow, aFloat); 其中aWindow是Swing组件,aFloat是不透明度。如何覆盖JPanel的paintComponent方法(为了做到这一点,您必须对JPanel本身进行子类化,并实现您自己的paintComponent方法)在p

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

这可能吗

AWTUtilities.setWindowOpacity(aWindow, aFloat);

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

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

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

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

使用颜色的alpha属性

例如:

panel.setBackground(new Color(0,0,0,64));
将创建一个具有64个alpha(透明度)的黑色

因此:

这是密码

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

它在windows 7上运行不太好

panel.setBackground( new Color(r, g, b, a) );
alpha通道只是使颜色变浅

当一个元素在带有alpha通道的颜色上更新时,计算机会混淆并重置没有alpha通道的更新元素的背景。我要试试看

AWTUtilities.setWindowOpacity(aWindow, aFloat);

下一步。

如果您有一个自定义面板,并且希望整个面板是半透明的,我建议您按照如下方式覆盖其方法组件:

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

他现在的问题措辞更好,但他在过去提出过一个非常类似的问题,他甚至接受了一个答案(作为参考):是的,这对我不起作用(如果你解释什么不起作用,我会帮你。另请参阅。对不起,我不懂。我不想要窗口不透明度,但是我想要JPanel不透明度。我使用JFrame,它工作得很好。AWTUtilities.setWindowOpacity(frame,(float)0.7);好的,但是如何使用JPanel处理背景图像(以看穿图像)?“a”是alpha设置,它是不透明度。正确的,您也可以阅读Color类的API,以获得该方法参数的完整描述。谢谢。我想说对不起。我应该更清楚。好的,但是如何使用JPanel处理背景图像(看穿图像)“?@janetsmith带AwUtilities的回答对JPanels不起作用……图像也有可能吗?”?