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

2022-09-03 03:26:15
    JFrame mainFrame = new JFrame();
    mainFrame.setSize(100, 100);
    mainFrame.setBackground(Color.CYAN);
    mainFrame.setVisible(true);

我的目的是创建一个具有青色背景的窗口。这是怎么回事?我的窗户没有像我预期的那样青色!

另外,任何人都可以指出为什么我似乎将所有颜色一式两份(有Color.CYAN和Color.cyan)。两者之间有什么区别吗?也许较旧的一个是Java中枚举之前的常量,第二个来自枚举?

谢谢


答案 1

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

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

因此,以下行:

mainFrame.setBackground(Color.CYAN);

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

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

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

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

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

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

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

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

资源

有关如何使用 Frames 的更多信息,请关注 Java 教程中的以下资源:


答案 2

这应该有效:

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

推荐