JPanel在更改背景时不保持颜色alpha
jpanel的背景颜色变得比以前更加不透明。 值得注意的是我正在使用jpanel的setBackground方法。 以下是您可能想要查看的代码的一些链接。
自定义GUI按钮
Gui它在 – 看第158行。
弹出两件事
- Swing不支持基于alpha的颜色,Swing组件不透明或透明。 你必须假装它,通过使组件透明,然后覆盖
paintComponent
并使用AlphaCompositeto
填充它,否则Swing将不知道它应该在你的组件下绘画,你最终会有更多的油漆问题 - 在您的
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方法)
希望我能帮助你
按钮仍然非常缓慢地失去了所有的透明度。
查看具有透明度的背景 ,了解可能存在的问题和解决方案。
基本上,您需要确保在绘制透明背景之前首先绘制父组件的背景,否则您将遇到所描述的问题。