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

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

我的目的是创建一个青色背景的窗口。 这有什么问题? 正如我所料,我的窗户没有青色!

此外,任何人都可以指出为什么我似乎有所有的颜色重复(有一个Color.CYAN和一个Color.cyan)。 这两者之间有什么不同吗? 也许在Java中有枚举之前,较旧的那个是常量,第二个来自Enum?

谢谢

为什么窗户不像预期的那样是青色的?

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

因此,以下行:

 mainFrame.setBackground(Color.CYAN); 

正在更改JFrame的颜色,但这实际上不是显示JFrame时立即可见的部分。

通过将上面的行更改为以下内容,我们需要更改所谓的“内容窗格*”(请参阅如何使用根窗格进行说明)的颜色:

 mainFrame.getContentPane().setBackground(Color.CYAN); 

在Swing中使用Frames在开始时可能会非常不直观,因此我强烈建议您查看我在本答案底部列出的资源。

Color.CYANColor.cyan之间有区别吗?

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

引入Color类时引入了具有小写名称的常量(似乎是JDK 1.0,因为Color类的Java API规范中没有“Since”表示法),并且稍后在JDK中添加了大写名称1.4。

可能添加了大写的命名常量,以使Color类中的常量名称与Java编程语言的代码约定一致,在第9节:命名约定中声明常量应为全大写字母。

资源

有关如何使用框架的更多信息, Java教程中的以下资源将会引起关注:

  • 如何制作框架 – 关于如何制作框架的一般信息。

  • 如何使用根窗格 – 有关窗格的更具体信息,包括不同窗格如何相互关联的说明。

  • 使用顶级容器

这应该工作:

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

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

除了名称之外,上部和驼峰的颜色常数之间没有区别。