## Crear un Controlador de Disposición Personalizado

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 es lo suficientemente flexible para trabajar en muchos casos.

Para crear un controlador de disposición personalizado, debes crear un clase que implemente el interface LayoutManager. LayoutManager requiere que se implementen estos cinco métodos:

public void addLayoutComponent(String name, Component comp)
  Llamado sólo por el método add(name, component) del contenedor. Los controladores de disposición que no necesitan que sus componentes tengan nombres eneralmente no hacen nada en este método.

public void removeLayoutComponent(Component comp)
  Llamado por los métodos remove() y removeAll() del contenedor.Los controladores de disposición que no necesitan que sus componentes tengan nombres generalmente no hacen nada en este método ya que pueden preguntarle al contenedor por sus componentes utilizando el método getComponents() del contenedor.

public Dimension preferredLayoutSize(Container parent)
  Llamado por el método preferredSize() de contenedor, que es llamado a sí mismo bajo una variedad de circunstancias. Este método debería calcular el tamaño ideal del padre, asumiendo que los componentes contendidos tendrán aproximadamente su tamaño preferido. Este método debe tomar en cuenta los bordes internos del padre (devueltos por el método insets() del contenedor).

public Dimension minimumLayoutSize(Container parent)
  Llamado por el método minimumSize() del contenedor, que a su vez es llamado bajo varias circunstancias. Este método debería calcular el tamaño mínimo del padre, asumiendo que todos los componentes que contiene tendrán aproximadamente su tamaño mínimo. Este método debe tomar en cuenta los bordes internos del padre (devueltos por el método insets() del contenedor).

public void layoutContainer(Container parent)
  Llamado cuando el contenedor se muestra por primera vez, y cada vez que cambia su tamaño. El método layoutContainer() del controlador de disposición realmente no dibuja los Componentes. Simplemente invoca los métodos resize(), move(), yreshape() para seleccionar el tamaño y posición de los componentes. Este método debe tomar en cuenta los bordes internos del padre (devueltos por el método insets() del contenedor). No se puede asumir que los métodos preferredLayoutSize() o minimumLayoutSize() serán llamados antes de que se llame al layoutContainer().

Junto a la implementación de estos cinco método requeridos por LayoutManager, los controladores de disposición generalmente implementan al menos un constructor público y el método toString().

Aquí tienes el código fuente para controlador de disposición personalizado llamado DiagonalLayout. Sitúa sus componentes diagonalmente, de izquierda a derecha con un componente por fila.

Aquí tienes un ejemplo de DiagonalLayout:

Ozito