JFrame setBackground的目的是什么?

时间:2014-06-13 20:36:11

标签: java swing jframe

创建JFrame实例时,您可以从此实例获得setBackground方法。但是,无论您尝试放置哪种颜色,都会获得灰色背景色。

这种情况发生(据我所知),因为默认JPanel实例是在JFrame内自动创建的并且覆盖它。因此,要获得颜色设置,您需要调用

JFrame.getContentPane().setBackground(Color.RED);

实际上调用了setBackground内的JPanel JFrame。 我还试着做下一个:

JFrame jf = new JFrame();

//I expect this will set size of JFrame and JPanel 
jf.setSize(300, 500);

//I expect this  to color JFrame background  yellow 
jf.setBackground(Color.yellow);

//I expect this to shrink default JPanel to 100 pixels high, 
//so 400 pixels of JFrame should became visible
jf.getContentPane().setSize(300, 100);

//This will make JPanel red
jf.getContentPane().setBackground(Color.RED);

在这组代码之后,我有一个JFrame大小的实心红色正方形,即300 x 500。 问题:

  1. 为什么jf.getContentPane().setSize(300, 100);没有调整默认JPanel的大小,显示JFrame背景?

  2. 为什么JFrame有setBackground方法,如果你无法看到它,并且它始终被JPanel覆盖?

1 个答案:

答案 0 :(得分:2)

根据JFrame的类层次结构,如下所示:

java.lang.Object
    java.awt.Component
        java.awt.Container
            java.awt.Window
                java.awt.Frame
                    javax.swing.JFrame

方法Frame#setBackground()继承自Frame,而JFrame并未覆盖它。

JFrame提出了什么:

  

JFrame类与Frame略有不兼容。与所有其他JFC / Swing顶级容器一样,JFrame包含 JRootPane 作为其唯一子容器。根窗格提供的内容窗格通常应包含JFrame显示的所有非菜单组件。这与AWT Frame案例不同。


您可以覆盖setBackground()的默认JFrame,如下所示:

@Override
public void setBackground(Color color){
    super.setBackground(color);
    getContentPane().setBackground(color);
}