2012-11-13 102 views
2

如果框架放置在内容窗格的顶部,则用户的外部颜色是JFrame的颜色。这里即使我在内容窗格之后画框,但内容窗格的颜色也会显示出来。为什么?为什么通过更改内容窗格颜色来改变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); 

    } 
} 

回答

3

您不应该设置JFrame本身的背景。你可以,是的,但它不能很好地工作。

它有覆盖整个框架内容窗格,所以任何颜色“下”会被掩盖,因为你已经找到。

所有的布局和样式应该在内容窗格中发生。

您可以将内容窗格设置为你选择的container,不过,有一个特殊的布局或诸如此类的东西。


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

便去检查设置什么颜色,和油漆。您调用setter的顺序并不重要。

+0

但我认为框架放置在内容窗格的顶部。 – Bernard

+2

不,内容窗格是INSIDE框架。框架始终是顶级的。内容窗格包含框架的内容;) – Ben

+0

感谢Steve的回答,我有点困惑。 Swing组件至少有一个顶级容器。在我的例子中,哪一个是摆动组件,哪一个是顶层容器? – Bernard