我正在创建一个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();
}
}
但是,无论我选择什么颜色,按钮仍然会将背景颜色显示为灰色。如何正确更改背景颜色?我环顾四周,大多数答案都提到了setBackground方法,但这对我不起作用。
提前致谢!
答案 0 :(得分:3)
检查当前程序这些行的顺序:
panel.add(cancelButton);
changeColor("Background", panel, new Color(0, 255, 0));
如果您按此顺序拥有它们,则会获得此输出:
但是如果你改变顺序:
changeColor("Background", panel, new Color(0, 255, 0));
panel.add(cancelButton);
你明白了:
答案 1 :(得分:1)
Nicholas Smith解决了我的问题。
在评论中,他提到“可能是您的特定LookAndFeel中的JButton的背景颜色无法覆盖。”
我在我的代码中设置了外观,一旦我删除了那部分代码,我的按钮的背景颜色就被成功更改了。
谢谢你!
答案 2 :(得分:0)
您应该使用LookAndFeel
更改GUI的UIManager.setLookAndFeel()
。
在MacOSX中发生了好几次