当前位置: 首页 > 知识库问答 >
问题:

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

芮念
2023-03-14

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

自定义GUI按钮

它所在的Gui--请看第158行。

共有3个答案

微生善
2023-03-14

按钮仍在慢慢失去所有透明度。

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

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

况浩邈
2023-03-14

GUI按钮第50行有一个错误-由于输入错误,您的背景设置程序有缺陷。

因此,如果您想将背景设置为新颜色,则什么都不会发生。

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

希望我能帮到你

李开宇
2023-03-14

弹出两个东西

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

例如,我要做的第一件事是更改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布局并学习如何使用适当的布局管理器,它们会让您的生活更简单

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

 类似资料:
  • 我无法让JPanel改变颜色。我也不能让JFrame改变颜色。我在网上查过...我还有一个程序,它有几乎相同的代码来设置JPanel和JFrame。我就是不能让它起作用。 下面是我的主要方法: 编辑:稍后在我的主要方法中有 下面是JPanel的构造函数: 背景颜色保持默认灰色。

  • 我试图在JFrame中更改JPanel的背景。JFrame由JPanels组成,很像一个网格。我试图改变JFrame中的一个随机JPanel,并查看循环中每一次的颜色变化。 如果取消对panel.add(individualPanel)行的注释,这将显示颜色变化,但它会不断向JFrame添加越来越多的JPanels。但是,注释这一行可以让我更改颜色,但不会显示JFrame中的任何更改。我试着修改了

  • 我有一个带有半径和笔划的CardView,但当我以编程方式更改CardView背景时,半径和笔划将丢失,我希望新颜色保留在笔划内。 这是我的cardview xml 这里是我换颜色的地方:

  • 我正在使用RangeSeekBar为3种情况设置一些值(即绿色=OK,琥珀色=警告,红色=撤离)...我正在使用xml绘图来设置背景 我知道我可以通过编程更改渐变,但如何缩小起始颜色并增加结束颜色?有人能解决这个问题吗? 谢谢

  • 我有一个java作业,其中我需要更改GUI的背景颜色,这取决于用户选择的列出不同颜色的单选按钮。我的程序有一个JFrame来保存所有东西,然后在这个框架中有3个JPanels(1个指令区,1个单选按钮网格,1个结果文本字段)。 My action listener当前正在使用以下语句设置背景颜色:getContentPane().SetBackground(color.Decode(ColorMa

  • 因此,我尝试使用getContentPane().setBackground(color.white)并尝试将table和scrollpane设置为白色。 这是唯一一个我不能改变颜色的框架,它是在另一个类中创建的- 通过这样做,我得到了另一个面板来成功地改变颜色