Swing y JFC (Java Foundation Classes)

Nota: Antes de empezar a crear un controlador de disposici�n personalizado, asegurate de que no existe ning�n controlador que trabaje de la forma apropiada. En particular, GridBagLayout y BoxLayout son lo suficientemente flexibles para trabajar en muchos casos. Tambi�n puedes encontrar controladores de distribuci�n desde otras fuentes, como Internet. Finalmente, puedes simplificar la distribuci�n agrupando los componentes en contenedores como en un panel invisible

Para crear un controlador de distribuci�n personalizado, debemos crear una clase que implemente el interface LayoutManager. Podemos implementando directamente o implementar su subinterface, LayoutManager2.

Todo controlador de distribuci�n debe implementar al menos estos cinco m�todos, que son requeridos por el interface LayoutManager.

void addLayoutComponent(String, Component)
Llamado por los m�todos add de Container. Los controladores de distribuci�n que no asocian cadenas con sus componentes generalmente no hacen nada en este m�todos.
void removeLayoutComponent(Component)
Llamado por los m�todos remove y removeAll de Container. Los controladores de distribuci�n no hacen nada en este metodo, en su lugar le preguntan por sus componentes al contenedor usando el m�todo getComponents de Container.
Dimension preferredLayoutSize(Container)
Llamado por el m�todo getPreferredSize de Container que a su vez es llamado bajo una gran variedad de circunstancias. Este m�todo deber�a calcular y devolver el tama�o ideal del contenedor, asumiendo que todos sus componentes ser�n de sus tama�os preferidos. Este m�todo debe tener en cuenta los bordes internos del contenedor que son devueltos por el m�todo getInsets.
Dimension minimumLayoutSize(Container)
Llamado por el m�todo getMinimumSize de Container, que a su vez es llamado bajo una gran variedad de circunstancias. Este m�todo deber�a calcular y devolver el tama�o m�nimo del contenedor, asumiendo que todos sus componentes ser�n de sus tama�os m�nimos. Este m�todo debe tener en cuenta los bordes internos del contenedor que son devueltos por el m�todo getInsets.
void layoutContainer(Container)
Llamado cuando el contenedor se muestra por primera vez, y cada vez que cambie su tama�o. Este m�todo realmente no dibuja componentes, s�lo invoca a los m�todos resize, move, y reshape de cada componente, para seleccionar su tama�o y posici�n. Este m�todo debe tener en cuenta los bordes internos del contenedor que son devueltos por el m�todo getInsets. No podemos asumir que se llamara a preferredLayoutSize o minimumLayoutSize antes de llamar a layoutContainer.

Adem�s de la implementaci�n de los cinco m�todos anteriores, los controladores de distribuci�n generalmente implementan un constructor p�blico y el m�todo toString.

Si deseamos soportar restricciones de componnetes, tama�os m�ximos o alineamiento, entonces nuestro controlador de distribuci�n deber�a implementar el interface LayoutManager2. Este interface a�ade cinco m�todos a los requeridos por LayoutManager.

  • addLayoutComponent(Component, Object)
  • getLayoutAlignmentX(Container)
  • getLayoutAlignmentY(Container)
  • invalidateLayout(Container)
  • maximumLayoutSize(Container)

Para m�s informaci�n sobre estos m�todos, puedes ver LayoutManager2 API documentation. Tambi�n puedes ver el c�digo fuente de BoxLayout, para ver como implementa el interface LayoutManager2.

Cuando se implementa un controlador de distribuci�n, podr�amos queres usan un objeto SizeRequirements para ayudarnos a determinar el tama�o y posici�n de los componentes. Puedes ver el c�digo fuente de BoxLayout para ver un ejemplo de uso de SizeRequirements.

Aqu� tienes el c�digo fuente de DiagonalLayout, un controlador de distribuci�n personalizado que distribuye sus componentes diagonalmente, de izquierda a derecha, con un componente por fila. Aqu� tenemos a DiagonalLayout en acci�n.

Esta es una imagen del GUI del Applet. Para ejecutarlo pulsa sobre ella y el applet aparecer� en una nueva ventana del navegador.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR