Java JFrame.setBackground()不工作--为什么?

Java JFrame.setBackground()不工作--为什么?,java,swing,Java,Swing,我的目的是创建一个青色背景的窗口。这有什么问题?我的窗户不像我预料的那样变青了 还有,有人能指出为什么我所有的颜色都是重复的(有一个Color.CYAN和一个Color.CYAN)。这两者有什么区别吗?也许旧的是Java中有枚举之前的常量,第二个是枚举 谢谢您想设置JFrame内容窗格的颜色 除了名称之外,大写和驼色大小写颜色常量之间没有区别。这应该可以: JFrame mainFrame = new JFrame(); mainFrame.setSize(100, 100);

我的目的是创建一个青色背景的窗口。这有什么问题?我的窗户不像我预料的那样变青了

还有,有人能指出为什么我所有的颜色都是重复的(有一个Color.CYAN和一个Color.CYAN)。这两者有什么区别吗?也许旧的是Java中有枚举之前的常量,第二个是枚举


谢谢

您想设置JFrame内容窗格的颜色

除了名称之外,大写和驼色大小写颜色常量之间没有区别。

这应该可以:

    JFrame mainFrame = new JFrame();
    mainFrame.setSize(100, 100);
    mainFrame.setBackground(Color.CYAN);
    mainFrame.setVisible(true);

为什么windows不像预期的那样呈青色?

这里的问题是显示
JFrame
内容的区域实际上是“内容窗格”,而不是
JFrame
本身的内容

因此,以下行:

JFrame mainFrame = new JFrame();
mainFrame.setSize(100, 100);
mainFrame.getContentPane().setBackground(Color.CYAN);
mainFrame.setVisible(true);
正在更改
JFrame
的颜色,但这实际上不是显示
JFrame
时立即可见的部分

所需的是通过将上一行更改为以下内容来更改称为“内容窗格*(请参阅以获取图示)的颜色:

mainFrame.setBackground(Color.CYAN);
在Swing中使用框架在一开始可能会出人意料地不直观,因此我强烈建议大家看看我在这个答案底部列出的参考资料

Color.CYAN
Color.CYAN
之间有区别吗?

不,两者之间没有区别——它们都是类中的常量,它们本身就是
Color
对象。唯一的区别在于常量的名称

带有小写名称的常量是在引入
Color
类时引入的(它似乎是JDK 1.0,因为在Java API规范中没有
Color
类的“自”符号),大写名称后来添加到JDK 1.4中

添加大写命名常量可能是为了使
Color
类中的常量名称和状态一致,即常量应为所有大写字母

资源

有关如何使用框架的更多信息,请参考以下资源:

  • -有关如何制作框架的一般信息

  • -有关窗格的更具体信息,包括不同窗格之间相互关系的图示


关于upper和camal case的颜色常数,是的,这就是我的想法。但是如果没有区别,为什么它们会有两个呢?我相信camelcase的名字最先出现的地方,不完全确定,但我相信这只是不符合Sun的命名标准,所以他们添加了适当大写的名字以符合标准.--当然,他们不想删除camelcased窗格,因为这会破坏现有的程序。值得注意的是,它为什么会工作,而不仅仅是一个代码答案。JFrame上有多个窗格:根窗格、分层窗格、内容窗格、玻璃窗格。这里重点关注的是内容窗格,它几乎显示了所有内容(可选菜单栏除外)。从Java 5开始,直接添加到框架的大多数内容都添加到内容窗格中。但是,设置背景颜色实际上是设置不可见根窗格的背景颜色。因此,您必须访问内容窗格才能更改颜色,因为理论上您可以更改其他窗格的背景颜色。
mainFrame.getContentPane().setBackground(Color.CYAN);