【问题标题】:Why JFrame colour is changing by changing content pane colour?为什么通过更改内容窗格颜色来更改 JFrame 颜色?
【发布时间】:2012-11-01 13:25:05
【问题描述】:

如果框架放置在内容窗格的顶部,则用户的外部颜色是 JFrame 的颜色。在这里,即使我在内容窗格之后绘制框架,但将显示内容窗格颜色。为什么?

public class GUI {
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(300,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        Color myColor = new Color(100,100,100);
        frame.setLocationRelativeTo(null);
        frame.getContentPane().setBackground(myColor);
        frame.setBackground(Color.red);

    }
}

【问题讨论】:

    标签: java swing jframe background-color


    【解决方案1】:

    您不应该设置 JFrame 本身的背景。可以,是的,但效果不是很好。

    它有一个覆盖整个框架的内容窗格,因此“下方”的任何颜色都将被覆盖,正如您所发现的那样。

    所有布局和样式都应在内容窗格中进行。

    您可以将内容窗格设置为您选择的container,但可以使用特殊布局或其他方式。


    此外,当您说“在内容窗格之后绘制框架”时,实际上并没有发生。 :) 您在设置内容窗格的背景后设置背景颜色,但在应用程序运行时触发其重绘标志之前,它实际上并没有被重绘。

    然后它会检查设置的颜色并进行绘制。您调用 setter 的顺序并不重要。

    【讨论】:

    • 但我认为框架放置在内容窗格的顶部。
    • 不,内容窗格在框架内。框架始终是顶级的。内容窗格包含框架的内容;)
    • 感谢史蒂夫的回答,我有点困惑。 Swing 组件至少有一个顶级容器。在我的示例中,哪一个是 Swing 组件,哪一个是顶级容器?
    • 它们都是摇摆组件,JFrame 比内容窗格更高级。由于它恰好是一个JFrame,它处于最高级别,所以它是终极的“顶级容器”。虽然,我不确定 JFrame 包含什么...
    • @Bernard 您可能想查看How to Use Root Panes,它解释了顶级窗口的基本容器层次结构
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2022-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多