## Cómo usar GridBagLayout: Especificar Restricciones

Abajo está el código que típicamente podremos ver en un contendor que use un GridBagLayout.

    GridBagLayout gridbag = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();

    JPanel pane = new JPanel();
    pane.setLayout(gridbag);

    //For each component to be added to this container:
    //...Create the component...
    //...Set instance variables in the GridBagConstraints instance...
    gridbag.setConstraints(theComponent, c);
    pane.add(theComponent);

Como podrías haber deducido del ejemplo anterior, se puede reutilizar el mismo ejemplar de GridBagConstraints para varios componentes, incluso si los componentes tienen distintas restricciones. El GridBagLayout extrae los valores de las restricciones y no vuelve a utilizar el GridBagConstraints. Sin embargo, se debe tener cuidado de resetar las variables de ejemplar del GridBagConstraints a sus valores por defecto cuando sea necesario.

Podemos seleccionar las siguientes varibles de ejemplar de GridBagConstraints:

gridx, gridy
  Especifica la fila y la columna de la esquina superior izquierda del componente. La columna más a la izquierda tiene la dirección gridx=0, y la fila superior tiene la dirección gridy=0. Utiliza GridBagConstraints.RELATIVE (el valor por defecto) para especificar que el componente debe situarse a la derecha (para gridx) o debajo (para gridy) del componente que se añadió al contenedor inmediatamente antes. Recomendamos especificar los valores gridx y gridy para cada componente, esto tiende a resultar en una distribución más predecible.

gridwidth, gridheight
  Especifica el número de columnas (para gridwidth) o filas (para gridheight) en el área de componente. Esta restricción especifica el número de celdas utilizadas por el componente, no el número de pixels. El valor por defecto es 1. Se utiliza GridBagConstraints.REMAINDER para especificar que el componente será el último de esta fila (para gridwidth) o columna (para gridheight). Se utiliza GridBagConstraints.RELATIVE para especificar que el componente es el siguiente al último de esta fila (para gridwidth) o columna (para gridheight).

  Nota: GridBagLayout no permite que los componentes se expanda múltiples filas a menos que el componente esté en la columna más a la izquierda o especifiquemos valores positivo de gridx y gridy para componente.

fill
  Utilizada cuando el área del pantalla del componentes es mayor que el tamaño requerido por éste para determinar si se debe, y cómo redimensionar el componente. Los valores válidos son GridBagConstraints.NONE (por defecto), GridBagConstraints.HORIZONTAL (hace que el componente tenga suficiente anchura para llenar horizintalmente su área de dibujo, pero no cambia su altura), GridBagConstraints.VERTICAL (hace que el componente sea lo suficientemente alto para llenar verticalmente su área de dibujo, pero no cambia su anchura), y GridBagConstraints.BOTH (hace que el componente llene su área de dibujo por completo).

ipadx, ipady
  Especifica el espacio interno: cuánto se debe añadir al tamaño mínimo del componente. El valor por defecto es cero. La anchura del componente debe ser al menos su anchura mínima más ipadx*2 pixels (ya que el espaciado se aplica a los dos lados del componente). De forma similar, la altura de un componente será al menos su altura mínima más ipady*2 pixels.

insets
  Especifica el espaciado externo del componente -- la cantidad mínima de espacio entre los componentes y los bordes del área de dibujo. Es valor es especificado como un objeto Insets. Por defecto, ningún componente tiene espaciado externo.

anchor
  Utilizado cuando el componente es más pequeño que su área de dibujo para determinar dónde (dentro del área) situar el componente. Los valores válidos (definidos como constantes en GridBagConstraints) son CENTER (por defecto), NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, y NORTHWEST.

weightx,weighty
  Especificar el peso es un arte que puede tener un impacto importante en la apariencia de los componentes que controla un GridBagLayout. El peso es utiliza para determinar cómo distribuir el espacio entre columnas (weightx) y filas (weighty); esto es importante para especificar el comportamiento durante el redimensionado.

  A menos que se especifique un valor distinto de cero para weightx o weighty, todos los componentes se situarán juntos en el centro de su contenendor. Esto es así porque cuando el peso es 0,0 (el valor por defecto) el GidBagLayout pone todo el espacio extra entre las celdas y los bordes del contenedor.

  Generalmente, los pesos son especificados con 0.0 y 1.0 como los extremos, con números entre ellos si son necesarios. Los números mayores indican que la fila o columna del componente deberían obtener más espacio. Para cada columna, su peso está relacionado con el mayor weightx especificado para un componente dentro de esa columna (donde cada componente que ocupa varias columnas es dividido de alguna forma entre el número de columnas que ocupa). Lo mismo ocurre con las filas para el mayor valor especificado en weighty. El espacio extra tiende a irese hacia la columna más a la derecha y hacia la fila más abajo.

La página siguiente explica las oblicaciones en más detalle, explicando cómo trabaja el programa del ejemplo.

Ozito