【问题标题】:Java - set opacity in JPanelJava - 在 JPanel 中设置不透明度
【发布时间】:2011-04-03 11:55:55
【问题描述】:

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

这可能吗?

【问题讨论】:

标签: java jpanel opacity


【解决方案1】:
panel.setBackground( new Color(r, g, b, a) );

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

【讨论】:

  • “a”是不透明度的alpha设置。
  • 对了,你也可以阅读Color类的API来获取方法参数的完整描述。
  • 谢谢。我想说对不起。我应该更清楚。
  • 好的,但是如何使用包含背景图像的 JPanel 来做到这一点(看穿图像)? @janetsmith 回答 AWTUtilities 不适用于 JPanels...
【解决方案2】:

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

【讨论】:

  • 图片也可以吗?
【解决方案3】:
AWTUtilities.setWindowOpacity(aWindow, aFloat);

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

【讨论】:

  • 对不起,我不关注。我不想要窗口不透明度,而是 JPanel 不透明度。 :D
  • 我使用 JFrame,它运行良好。 AWTUtilities.setWindowOpacity(frame, (float) 0.7);
  • 好的,但是如何使用包含背景图像的 JPanel 来做到这一点(看穿图像)?
【解决方案4】:

它在 Windows 7 上效果不佳。

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

Alpha 通道只是使颜色变亮。

当一个元素在一个带有 alpha 通道的颜色上更新时,计算机会感到困惑并重置没有 alpha 的更新元素的背景。我去试试

AWTUtilities.setWindowOpacity(aWindow, aFloat);

下一个。

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 2017-11-13
        • 2018-06-14
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 2016-05-15
        • 1970-01-01
        • 2014-07-28
        • 1970-01-01
        相关资源
        最近更新 更多