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

参考颜色变量java更改组件的背景颜色

法烨烨
2023-03-14

我试图创建一个包含大量JPanel和文本部分的JFrame,所有这些都有默认颜色(面板背景为白色,文本为黑色)。我想允许用户在运行时动态地更改这些内容,因此我实现了一个JColorChooser对话框,在这里我可以单击一个按钮,显示对话框,从那里我可以保存颜色。

我的默认颜色在实例变量中设置,如下所示:

private Color panelColor;
private Color textColor;

要设置面板的背景色,我使用:

JPanel samplePanel = new JPanel();
samplePanel.setBackground(panelColor); //panelColor has already been instantiated

这很好,使面板变白。但是,当我尝试使用JColorChooser加载新的颜色以供使用时,面板不会改变。选择颜色后我使用的代码是:

if(newColor != null)
{
    panelColor = newColor;
    myFrame.repaint();
}

我所有的组件都在一个JFrame中,我认为在JFrame上调用repaint()会反过来调用paintChildren(),并级联到最低级别。

我相信我的问题在于我对Java中如何处理对象的理解。我知道对象是按引用传递的,但我也假设当我设置组件的背景颜色时,这是通过按引用传递场景实现的,对此我开始怀疑。当我调用setbackground()时,我传递的颜色参数最终会作为通过值传递的副本吗?

如果我的直觉是正确的,这是否意味着我应该编写一个方法,让所有需要更改其背景的组件,并调用每个组件的setBackground(),将颜色变量与新值传递进来?

干杯

共有1个答案

危宜
2023-03-14

由于在使用setbackground()时,颜色对象是按值传递给组件的,因此,正如Markspace建议的那样,每个组件都将调用其单独的方法。

使用Dan O在这个线程中提供的代码的修改版本:迭代Jframe中的所有对象,我想出了一个解决方案,允许修改JFrame中的每个JPanel(或者任何容器)。这是一个递归解决方案,所以任何嵌套的容器实例也将迭代它们的子实例。

public void setPanelColor(Container parent)
{
    for(Component c : parent.getComponents())
    {
        if(c instanceof Container)
        {
            if(c instanceof JPanel)
            {
                c.setBackground(panelColor);
            }

            setPanelColor((Container)c);
        }
    }
}

由于我使用一个实例变量(panelColor)来保存颜色,我可以从方法中引用它,但您可以轻松地将其作为参数传入,并用panelColor替换传入的颜色变量的名称。

 类似资料:
  • 我在设计JScrollPane的样式时遇到问题。我只想能够更改拇指和背景的颜色(同时删除增加/减少按钮)。到目前为止,我尝试了以下方法: 而且 有了上面所有的代码,我得到了一个白色背景的暗拇指。有趣的是,如果我删除setUI函数,我会得到一个默认的拇指,背景变暗... 有什么想法吗? 谢啦 解决****** 上面的configureScrollBarColors函数可以通过以下方式使用: 把拇指的

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

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

  • 问题内容: 有什么方法可以更改RibbonApplicationMenuEntryPrimary(Flamingo)的背景颜色吗? 我看了看它的javadoc,但找不到方法。 问题答案: 1)请注意,我已检查API;从开始,有很多导入和扩展,它们来自许多不同的方法(这里是我尝试覆盖MetalButtonUI的尝试)。 2)也许更改内置颜色主题会很容易,但是我不建议这样做。 3)我不是Flaming

  • 这是我的java文本,看起来有点出乎意料,但是我想改变按钮的背景颜色,这取决于答案是正确的还是错误的 属于“voortgang-button”的css } 然而;现在的问题是我做错了什么?我是一个刚开始的JavaScript程序员,也是荷兰人,所以请多包涵;).

  • 我正在使用浮动操作按钮,我想更改背景颜色。 这是我的密码 下面是我用来尝试实现这一点的代码: 我也得到我的FAB的角落,如图所示。我应该如何消除那些角落的阴影?