Java 更改JButton的背景色始终显示为灰色

Java 更改JButton的背景色始终显示为灰色,java,swing,background,jbutton,Java,Swing,Background,Jbutton,我正在制作GUI界面,并尝试使用以下代码更改窗口的背景色和前景色: import java.awt.Color; import java.awt.Component; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Test { public static void

我正在制作GUI界面,并尝试使用以下代码更改窗口的背景色和前景色:

  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Container;

  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;

  public class Test
  {

public static void changeColor(String typeOfColor, Component component, Color color)
{
    if (typeOfColor.equals("Background"))
    {
        component.setBackground(color);
    }
    else if (typeOfColor.equals("Foreground"))
    {
        component.setForeground(color);
    }

    if (component instanceof Container)
    {
        for (Component child : ((Container) component).getComponents())
        {
            changeColor(typeOfColor, child, color);
        }
    }
}

public static void main(String[] args)
{
    JPanel panel = new JPanel();
    JButton cancelButton = new JButton("Cancel");
    panel.add(cancelButton);

    changeColor("Background", panel, new Color(0, 255, 0));

    JFrame frame = new JFrame("Frame");

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.setVisible(true);
    frame.pack();
}
}
但是,无论我选择什么颜色,按钮仍将背景色显示为灰色。如何正确更改背景色?我环顾四周,大多数答案都提到了挫折的方法,但这对我不起作用


提前谢谢

您应该使用
UIManager.setLookAndFeel()
更改GUI的
LookAndFeel


我在MacOSX中遇到过几次这种情况

请检查当前程序中这些行的顺序:

panel.add(cancelButton);
changeColor("Background", panel, new Color(0, 255, 0));
如果按此顺序排列,则会得到以下输出:

但如果您更改顺序:

changeColor("Background", panel, new Color(0, 255, 0));
panel.add(cancelButton);
你得到这个:


尼古拉斯·史密斯解决了我的问题

在评论中,他提到“它可能是特定外观中的JButton的背景色,但无法覆盖。”

我在我的代码中设置了外观,一旦我删除了那部分代码,我的按钮的背景色就成功地改变了


谢谢你

你能帮我寄封信吗?不是您的完整代码,而是一个简单的示例,具有最小的和相关的示例,我们可以复制粘贴并看到与您相同的问题?您的应用程序使用的是什么外观和感觉?谢谢您的回答。我已经更新了我的代码,很奇怪,在这个简短的例子中,它确实有效,但在我的应用程序中却没有,因为它包含太多的控件,无法在这里显示。另外,我没有设置特定的LookAndFeel。它可能是您特定外观中JButton的背景色,并且无法覆盖。您可能希望尝试button.setObaque(false);允许背景色显示出来。我很高兴这有帮助,如果是的话。在您的情况下,您想要不同颜色的面板吗?如果是这样的话,也请检查一下,这可能会有一些帮助,请不要叫我先生,这会让我觉得自己老了,哈哈(删除了以前的评论,因为我无法再次编辑它,它都坏了)。谢谢你,弗拉克库勒!我意识到我的问题不太清楚。我有一个包含许多子面板的面板。我将所有子面板添加到主面板,然后更改主面板的颜色。(我需要在添加所有组件后进行更改,这就是为什么会出现递归)。当我这样做时,按钮的背景色仍然是灰色的。因此,我没有权利改变changeColor方法的顺序,嗯,然后拒绝回答,这样更多的人可以看到你的问题,并尝试在你的样本代码上得到相同的错误,或者我可以添加一个不同的更精确的问题:P。谢谢你米格尔的帮助:)。