Saltar la navegación

3.3.4.- Contenedor ligero: JPanel.

Cuatro paneles dispuestos sobre un marco, cada uno de los cuales contiene una etiqueta y un campo de texto.
José Javier Bermúdez Hernández (CC BY-NC)

Es la clase utilizada como contenedor genérico para agrupar componentes.
Normalmente cuando una ventana de una aplicación con interfaz gráfica cualquiera presenta varios componentes, para hacerla más atractiva y ordenada al usuario se suele hacer lo siguiente:

  • Crear un marco, un JFrame.
  • Para organizar mejor el espacio en la ventana, añadiremos varios paneles, de tipo JPanel. (Uno para introducir los datos de entrada, otro para mostrar los resultados y un tercero como zona de notificación de errores.)
  • Cada uno de esos paneles estará delimitado por un borde que incluirá un título. Para ello se usan las clases disponibles en BorderFactory (BevelBorder, CompoundBorder, EmptyBorder, EtchedBorder, LineBorder, LoweredBevelBorder, MatteBorder y TitledBorder) que nos da un surtido más o menos amplio de tipos de bordes a elegir.
  • En cada uno de esos paneles se incluyen las etiquetas y cuadros de texto que se necesitan para mostrar la información adecuadamente.

Con NetBeans es tan fácil como arrastrar tantos controles JPanel de la paleta hasta el JFrame. Por código, también es muy sencillo, por ejemplo podríamos crear un panel rojo, darle sus características y añadirlo al JFrame del siguiente modo:

Cuando en Sun desarrollaron Java, los diseñadores de Swing, por alguna circunstancia, determinaron que para algunas funciones, como añadir un JComponent, los programadores no pudiéramos usar JFrame.add, sino que en lugar de ello, primeramente, tuviéramos que obtener el objeto Container asociado con JFrame.getContentPane(), y añadirlo.

Sun se dio cuenta del error y ahora permite utilizar JFrame.add, desde Java 1.5 en adelante. Sin embargo, podemos tener el problema de que un código desarrollado y ejecutado correctamente en 1.5 falle en máquinas que tengan instalado 1.4 o anteriores.

Para saber más

En la siguiente web puedes ver algo más sobre paneles.

Paneles.