JPanel在更改背景时不保持颜色alpha

jpanel的背景颜色变得比以前更加不透明。 值得注意的是我正在使用jpanel的setBackground方法。 以下是您可能想要查看的代码的一些链接。

自定义GUI按钮

Gui它在 – 看第158行。

弹出两件事

  1. Swing不支持基于alpha的颜色,Swing组件不透明或透明。 你必须假装它,通过使组件透明,然后覆盖paintComponent并使用AlphaCompositeto填充它,否则Swing将不知道它应该在你的组件下绘画,你最终会有更多的油漆问题
  2. 在您的TranslucentPanel ,您允许组件绘制其背景,然后再用半透明版本填充它,加倍。 您需要将此组件设置为透明

我要做的第一件事是更改TranslucentPane以便您可以控制透明度级别

 public class TranslucentPane extends JPanel { private float alpha = 1f; public TranslucentPane() { } public void setAlpha(float value) { if (alpha != value) { alpha = Math.min(Math.max(0f, value), 1f); setOpaque(alpha == 1.0f); repaint(); } } public float getAlpha() { return alpha } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.setComposite(AlphaComposite.SrcOver.derive(getAlpha())); g2d.setColor(getBackground()); g2d.fillRect(0, 0, getWidth(), getHeight()); g2d.dispose(); } } 

接下来,我将更改panel_Bottom以实际使用它…

 private TranslucentPane panel_Bottom; //... panel_Bottom = new TranslucentPane(); panel_Bottom.setBorder(new LineBorder(new Color(0, 0, 0))); if(isTransparent){ panel_Bottom.setAlpha(0.85f); } 

例

我也强烈建议您停止使用null布局并学习如何使用适当的布局管理器,它们会让您的生活更简单

有关更多详细信息,请查看在容器中布置组件

您在GUI-Button第50行中出错 – 由于输入错误,您的背景设置器出现故障。

因此,如果您想将背景设置为新颜色,则不会发生任何事情。

但我认为你的透明度问题来自GuiSettings中的第199行 – 在那里你设置了一个复合值,使你的像素在每次调用后变得“更暗”。 (原因是使用0.85f作为参数调用derive方法)

希望我能帮助你

按钮仍然非常缓慢地失去了所有的透明度。

查看具有透明度的背景 ,了解可能存在的问题和解决方案。

基本上,您需要确保在绘制透明背景之前首先绘制父组件的背景,否则您将遇到所描述的问题。