创建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。
问题:
为什么jf.getContentPane().setSize(300, 100);
没有调整默认JPanel
的大小,显示JFrame
背景?
为什么JFrame有setBackground
方法,如果你无法看到它,并且它始终被JPanel
覆盖?
答案 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);
}