gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:05 25 4
gpt4 key购买 nike

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

Custom GUI Button

The Gui it's in -- 查看第 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);
}

Example

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

看看Laying Out Components Within a Container了解更多详情

关于java - JPanel 在更改背景时不保持颜色 alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31105099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com