## Reglas Generales para el uso de los Controladores de Disposición

A menos que se le diga a un contenedor que no utilice un controlador de disposición, el está asociado con su propio ejemplar de un controlador de disposición. Este controlador es consultado automáticamente cada vez que el contenedor necesita cambiar su apariencia. La mayoría de los controladores de disposición no necesitan que los programan llamen directamente a sus métodos.

### Cómo Elegir un Controlador de Disposición

> Los controladores de disposición proporcionados por el AWT tienen diferentes potencias y puntos débiles. Esta sección descubre algunos de los escenarios de disposición más comunes y cómo podrían trabajar los controladores de disposición del AWT en cada escenario. Si ninguno de los controladores del AWT se adapta a su situación, deberá sentirse libre para utilizar controladores de disposición distribuidos por la red, como un PackerLayout.

> Escenario: Necesita mostrar un componente en todo el espacio que pueda conseguir.
>   Considera la utilización de BorderLayout o GridBagLayout. Si utilizas BorderLayout, necesitarás poner el componente que necesite más espacio en el centro. Con GridBagLayout, necesitarás seleccionar las restricciones del componente para que fill=GridBagConstraints.BOTH. O, si no si no te importa que todos los componentes del mismo contenedor tengan el tamaño tan grande cómo el del componente mayor, puedes utilizar un GridLayout.

> Escenario: Se necesita mostrar unos pocos componentes en una línea compacta en su tamaño natural.
>   Cosidera la utilización de un Panel para contener los componentes utilizan el controlado por defecto de la clase Panel: FlowLayout.

> Ecenario: Necesita mostrar unos componentes con el mismo tamaño en filas y/o columnas.
>   GridLayout es perfecto para esto.

### Cómo crear un Controlador de Disposición y Asociarlo con un Contenedor

> Cada contenedor tiene asociado un controlador de disposición por defecto. Todos los Paneles (incluyendo los Applets) están inicializados para utilizar FlowLayout. Todas las ventanas (excepto las de propósito especial como los FileDialog) están inicialziadas para utilizar BorderLayout.

> Si quieres utilizar el controlador de disposición por defecto de un Contenedor, no tiene que hacer nada. El constructor de cada Contenedor crea un ejemplar del controlador de disposición e inicializa el Contenedor para que lo utilice.

> Para utilizar un controlador de disposición que no sea por defecto, necesitarás crear un ejemplar de la clase del controlador deseado y luego decirle al contenedor que lo utilice. Abajo hay un código típico que hace esto. Este código crea un controlador CardLayout y lo selecciona para utilizarlo con el Contenedor.

>     aContainer.setLayout(new CardLayout());

### Reglas del Pulgar para utilizar Controladores de Disposición

> Los métodos del contenedor que resultan en llamadas al controlador de disposición del Contenedor son :
> - add()
> - remove(),
> - removeAll(),
> - layout(),
> - preferredSize(),
> - minimumSize().
> Los métodos add(), remove(), removeAll() añaden y eliminan Componentes de un contendor; y puedes llamarlos en cualquier momento.
> El método layout(), que es llamado como resultado de un petición de dibujado de un Contenedor, petición en la que el Contenedor se sitúa y ajusta su tamaño y el de los componentes que contiene; normalmente no lo llamarás directamente.
> Los métodos preferredSize() y minimumSize() devuelve el tamaño ideal y el tamaño mínimo, respectivamente. Los valores devueltos son sólo apuntes, no tienen efecto a menos que su programa fuerce esto tamaños.

> Deberás tener especial cuidado cuando llames a los métodos preferredSize() y minimumSize() de un contenedor. Los valores devueltos por estos métodos no tienen importancia a menos que el contenedor y sus componentes tengan objetos pares válidos. Puedes ver: Detalles de la Arquitectura de Componentes para más información sobre cuando se crean los pares.

Ozito