Cómo Utilizar GridBagLayout: Especificar Obligaciones
Abajo tienes parte del código que podrás ver en un contenedor que utiliza un
GridBagLayout. (Verás un ejemplo explicado en la página siguiente).
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gridbag);
//Para cada componentes que sea añadido a este contenedor:
//...Crea el componente...
//...Seleccionar las variables de ejemplar en el objeto GridBagConstraints...
gridbag.setConstraints(theComponent, c);
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 obligaciones.
El GridBagLayout extrae los valores de las obligaciones 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.
Puede seleccionar las siguientes variables de ejemplar del 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.
- gridwidth, gridheight
- Especifica el número de columnas (para gridwidth) o filas (para gridheight) en el área de componente. Esta obligación especifica el número de celdas utilizadas por el componente, no el número de pixels. El valor por defecto es 1. Utiliza GridBagConstraints.REMAINDER para especificar que el componente será el último de esta fila (para gridwidth) o columna (para gridheight). Utiliza GridBagConstraints.RELATIVE para especificar que el componente es el siguiente para el último de esta fila (para gridwidth) o columna (para gridheight).
Nota: Debido a un error en la versión 1.0 de Java, GridBagLayout no permite un componente se espanda varias columnas a menos que sea el primero por la izquierda.
- 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 son :
- GridBagConstraints.CENTER (por defecto),
- GridBagConstraints.NORTH,
- GridBagConstraints.NORTHEAST,
- GridBagConstraints.EAST,
- GridBagConstraints.SOUTHEAST,
- GridBagConstraints.SOUTH,
- GridBagConstraints.SOUTHWEST,
- GridBagConstraints.WEST,
- GridBagConstraints.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
componente 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 componete 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.
La página siguiente explica las oblicaciones en más detalle, explicando cómo trabaja el applet del ejemplo.
Ozito