SwingApplication crea cuatro componentes Swing muy utilizados:
El frame es un contenedor de alto nivel. Existe principalmente para proporcionar espacio para que se dibujen otros componentes Swing. Los otros contenedores de alto nivel más utilizados son los diálogos (JDialog) y los applets (JApplet).
El panel es un contenedor intermedio. Su único propósito es simplificar el posicionamiento del botón y la etiqueta. Otros contenedores intermedios, como los paneles desplazables, (JScrollPane) y los paneles con pestañas (JTabbedPane), típicamente juegan un papel más visible e interactivo en el GUI de un programa.
El botón y la etiqueta son componentes atómicos -- componentes que existen no para contener otros componentes Swing, sino como entidades auto-suficientes que representan bits de informaión para el usuario. Frecuentemente, los componentes atómicos también obtienen entrada del usuario. El API Swing proporciona muchos componentes atómicos, incluyendo combo boxes (JComboBox), campos de texto (JTextField), y tablas (JTable).
Aquí podemos ver un diágrama con el árbol de contenidos de la ventana mostrada por SwingApplication. Este diágrama muestra todos los contenedores creados o usados por el programa, junto con los componentes que contienen. Observa que si añadimos una ventana -- por ejemplo, un diálogo -- la nueva ventana tendría su propio árbol de contenidos, independiente del mostrado en esta figura.
JFrame (un contenedor de algo nivle)
|
...
|
panel de contenido
|
JPanel
|
+----------------+
| |
JButton JLabel
Como muestra la figura, incluso el programa Swing más sencillo tiene múltiples niveles en su árbol de contenidos. La raíz del árbol de contenidos es siempre un contenedor de alto nivel. Este contenedor proporciona espacio para que sus componentes Swing descendentes se dibujen a sí mismo.
Todo contenedor de alto nivel contiene indirectamente un contenedor intermedio conocido como panel de contenido. Para la mayoría de los programas no necesitas saber qué pasa entre el contenedor de alto nivel y su panel de contenido. (Si realmente quieres verlo, puedes ver Cómo usar Paneles Raíz.)
Truco: Para ver el árbol de contenidos de cualquier frame o diálogo, pulsa el borde para seleccionarlo y pulsa Control-Shift-F1. Se escribirá una lista con el árbol de contenidos en el stream de salida estándard.
Cómo regla general, el panel de contenido contiene, directamente o indirectamente, todos los componentes visibles en el GUI de la ventana. La gran excepción a esta regla es que si el contenedor de alto nivel tiene una barra de menú, entonces ésta se sitúa en un lugar especial fuera del panel de contenido.
Para añadir componentes a un contenedor, se usa una de las distintas formas del método add. Este método tiene al menos un argumento -- el componente a añadir. Algunas veces se requiere un argumento adicional para proporcionan información de distribución. Por ejemplo, la última línea del siguiente código de ejemplo especifica que el panel debería estar en el centro de su contenedor (el panel de contenido).
frame = new JFrame(...);
button = new JButton(...);
label = new JLabel(...);
pane = new JPanel();
pane.add(button);
pane.add(label);
frame.getContentPane().add(pane, BorderLayout.CENTER);
Para ver todos los componentes Swing puedes ir a la página Un índice visual de los Componentes Swing.