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

dev*_*ium 13 java swing

    JFrame mainFrame = new JFrame();
    mainFrame.setSize(100, 100);
    mainFrame.setBackground(Color.CYAN);
    mainFrame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

coo*_*ird 44

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

这里的问题是JFrame显示内容的区域实际上是"内容窗格",而不是JFrame自身的内容.

因此,以下行:

mainFrame.setBackground(Color.CYAN);
Run Code Online (Sandbox Code Playgroud)

正在改变颜色JFrame,但实际上并不是显示时立即可见的部分JFrame.

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

mainFrame.getContentPane().setBackground(Color.CYAN);
Run Code Online (Sandbox Code Playgroud)

在Swing中使用Frames在开始时可能会出乎意料地不直观,因此我强烈建议您查看我在此答案底部列出的资源.

有没有之间的差异Color.CYANColor.cyan

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

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

可能添加了另外大写命名常量,使常量名在Color类的一贯准则约定Java编程语言,其在第9节:命名约定声明常量应全部大写.

资源

有关如何使用框架的更多信息,Java教程中的以下资源将是您感兴趣的: