在過去的J2SE版本中,部件(components)不能直接添加到最高級(top level)的Swing容器,這些容器包括:JFrame, JDialog, JWindow, JApplet和JInternalFrame. 例如現在有一個JFrame的instance命名為aFrame。 我們要添加一個命名為aComponent的部件(比如一個JPanel)到JFrame里。以往我們需要調用JFrame的getContentPane()辦法。如下:
aFrame.getContentPane().add(aComponent)
在J2SE5.0中,我們可以直接添加部件到最高級的Swing容器,也可以直接在容器內設置布局管理(Layout Manager)和刪除部件。這個變化允許我們可以省去調用getContentPane()而直接在容器內應用add(),setLayout()和remove()。然而,我們還是不能忽略了ContentPane,即使我們可能將不會再使用ContentPane來添加部件到容器。 先看一個我們以往在J2SE1.4及其以前的版本經常應用到的例子。我們要設置一個JFrame的布局管理而且添加一些部件到該JFrame。查看api關於JFrame的文件可以發現, JFrame從java.awt.Container繼承了add()辦法. 該add()是用來添加一個部件到JFrame容器. Container類里也包含setLayout()辦法, 該setLayout()是用來設置繼承者(比如上面的JFrame容器)的布局管理。
下面是一個簡單的例子:
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.Color;
public class FrameTest extends JFrame {
//注意在1.4及其以前版本中可以編譯,但是運行有問題
//5.0版本運行正常
FrameTest(){
super("Test");
setBackground(Color.BLACK);
setLayout(new GridLayout(6,6,2,2)); // 1.4中問題 1
for ( int i=0;i<36; i++){
JPanel jPanel = new JPanel();
jPanel.setBackground(new Color (
(int)(Math.random()*16777215)));
add(jPanel); // 1.4中問題 2
}
setSize(400,400);
setVisible(true);
}
public static void main(String[] args){
new FrameTest();
}
}
運行效果1如下:

這時我們注意到上面輸出的JFrame的背景顏色並不是黑色而是白色, 也就是說上面的setBackground(Color.BLACK)編譯后該JFrame的背景顏色並沒有被顯示,如果要讓JFrame背景顏色為黑色--grid之間顏色為黑色還需要調用getContentPane(),
getContentPane().setBackground(Color.BLACK);
運行效果2如下:

From:http://mindprod.com/jgloss/contentpane.html

