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 Distribuci�n
Los controladores de disposici�n proporcionados por la plataforma Java tienen diferentes potencias y puntos d�biles. Esta secci�n descubre algunos de los escenarios de distribuci�n m�s comunes y c�mo podr�an trabajar los controladores de distribuci�n del AWT en cada escenario. Si ninguno de los controladores del AWT se adapta a nuestra situaci�n, deberiamos; sentirnos libres para utilizar controladores de distribuci�n distribuidos por la red, o escribir el nuestro propio.
- Escenario:Necesitamos mostrar un componente en todo el espacio que se pueda conseguir.
- Consideramos la utilizaci�n de BorderLayout o GridBagLayout. Si utilizamos BorderLayout, necesitarremos poner el componente que necesite m�s espacio en el centro. Con GridBagLayout, necesitaremos seleccionar las restricciones del componente para que fill=GridBagConstraints.BOTH. Otra posibilidad es usar BoxLayout, haciendo que el componente con m�s tama�o especifique unos tama�o preferido y m�ximo muy grandes
- Escenario: Necesitamos mostrar unos pocos componentes en una fila compacta a su tama�o natural.
- Consideramos usar un JPanel para contener los componentes y usar el controlador por defecto de JPanel que es FlowLayout o usar BoxLayout.
- Escenario: Necesitamos mostrar unos pocos componentes del mismo tama�o en filas y columnas.
- GridLayout es perfecto para esto.
- Escenario: Necesitamos mostrar unos pocos componentes en filas y columnas, posiblemente variando la cantidad de espacio entre ellos, con alineamientos personalizados, o tama�os de componentes personalizados.
- BoxLayout es perfecto para esto
- Escenario: Tenemos una distribuci�n compleja con muchos componentes
- Debemos considerar la utilizaci�n de GridBagLayout o agrupar los componetes en uno o m�s JPanel para simplificar la distribuci�n. Cada JPanel daber�a usar un diferente controlador de distribuci�n.
�C�mo crear un Controlador de Distribuci�n y Asociarlo con un Contenedor
Como se mencion� en Control de Distribuci�n, por convenci�n, cada contenedor tiene su controlador de distribuci�n. Todos los objetos JPanel se inicializan para usar un FlowLayout. El panel de contenidos para todos los objetos JApplet, JDialog, y JFrame est� inicializado para usar un BorderLayout. Otros contendores Swing tienden a tener controladores de distribuci�n muy especializados o, como en el caso de JLayeredPane, no tienen controlador de distribuci�n.
Si queremos utilizar el controlador de distribuci�n por defecto de un Contenedor, no tenemos que hacer nada. El constructor de cada Contenedor crea un ejemplar del controlador de distribuci�n e inicializa el Contenedor para que lo utilice.
Para utilizar un controlador de disposici�n que no sea por defecto, necesitaremos crear un ejemplar de la clase del controlador deseado y luego decirle al contenedor que lo utilice. Normalmente s�lo haremos esto para JPanel y para paneles de contenido. La siguiente sentencia crea un controlador BorderLayout y lo inicializa como controlador de distribuci�n para un panel
aJPanel.setLayout(new BorderLayout());
Aqu� podemos ver un ejemplo de hacer que un objeto FlowLayout sea el controlador de distribuci�n para el panel de contenido de un applet.
//In a JApplet subclass. Container contentPane = getContentPane(); contentPane.setLayout(new FlowLayout());
�Reglas del pulgar para usar Controladores de Distribuci�n
Los m�todos de Container que dan como resultado llamadas a su controlador de distribuci�n son add, remove, removeAll, doLayout, invalidate, getAlignmentX, getAlignmentY, getPreferredSize, getMinimumSize, y getMaximumSize. Los m�toso add, remove, y removeAll a�aden y eliminan componentes de un contenedor; se les puede llamar en cualquier momento. El m�todo doLayout, que es llamado como resultado de cualquier petici�n de dibujado de un contenedor o de una llamada a validate sobre el contenedor, requiere que el contenedor se situe y redimensione a s� mosmo y a los componentes que contiene; no se puede llamar al m�todo doLayout directamente.
Si cambiamos el tama�o d eun componente, aunque sea indirectamente como cambiando su fuente, el componente deber�a redimensionarse autom�ticamente y redibujarse a s� mismo. Si esto no sucediera por alguna raz�n, deber�amos invocar al m�todo revalidate del componente. Esta petici�nes pasada a trav�s del �rbol de contenientes hasta que encuentre un contenedor, como un scroll-pane o un contenedor de alto nivel, que no deber�a verse afecta por el redimensionado del componene. (Esto est� determinado por la llamda al m�todo isValidateRoot del contenedor.) El contenedor es entonces redistribuido, lo que tiene el efecto de ajustar los componentes revalidados y todos los dem�s componentes afectados. Despu�s de llamar a revalidate sobre un componene se deber�a llamar a repaint.
Los m�todos getAlignmentX y getAlignmentY son llamados por los controladores de distribuci�n para intenrar alinear grupos de componentes. BoxLayout es el �nico controlador de distribuci�n que llama a estos m�todos.
Los m�todos getPreferredSize, getMinimumSize, y getMaximumSize retornan los tama�os ideal, m�nimo y m�ximo, respectivamente. Los valores devueltos son s�lo indicativos, un controlador de distribuci�n puede ignorarlos.