# Java: Content Panes

## Description

Before Java 2 each top-level container had only one layer. Java 2 top-level containers (JFrame, JApplet, ...) have several layers (panes): root, content, layered, and glass. Programs normally reference only the content pane. There are two programming idioms for using the content pane: (1) using the preassigned pane (recommended), or (2) building your own pane.

## Naming convention

It is common to name the content pane `content` or `contentPane`.

## Idiom 1: Use the existing content pane

Each container has a preconstructed content pane of class `Container`. You can get this pane and add the components to it. For example,

    class MyWindow extends JFrame {
        . . .
        MyWindow() {   // constructor
            Container content = getContentPane();  // Use the default content pane.
            content.add(...);
            content.add(...);
            . . .

All JFrames already have a content pane, so there's no need to create a new one, just get the existing pane. And if you're wondering about the `Container` type, it's a superclass of `JPanel`. In fact, if you look at the actual type of the object that's currently returned by `getContentPane()`, it really is a JPanel, altho you can't count on this in the future, of course.

Sometimes programmers don't bother to copy the content pane reference into a new variable, resulting in code like this. Since there are typically a large number of references to the content pane, this seems awkward.

    class MyWindow extends JFrame {
        . . .
        MyWindow() {   // constructor
            getContentPane().add(...);
            getContentPane().add(...);
            . . .

## Idiom 2: Create your own content pane

It's common to create a new panel for the content pane and tell the window to use this new panel for it's content pane. For example,

    class MyWindow extends JFrame {
        . . .
        MyWindow() {   // constructor
            JPanel content = new JPanel();  // Create a new content pane.
            content.add(...);
            content.add(...);
            . . .
            setContentPane(content);