Gestores de Diseño: GridLayout y GridBagLayout

Clase GridLayout

java.lang.Object
java.awt.GridLayout

La clase GridLayout es un controlador de distribución(Layout Manager) que establece los componentes de un contenedor en una rejilla rectangular. El recipiente se divide en rectángulos de igual tamaño, y un componente se va colocando en cada rectángulo.

Muy similar al popular juego 3 en linea/raya, ta-te-ti, tic-tac-toe, etc


Constructores:

  • GridLayout()
    • A secas, sin parámetros, Crea un diseño de cuadrícula por defecto de una columna por componente, en una sola fila.
  • GridLayout(int rows, int cols)
    • Crea una rejilla con el numero de filas(rows) y el numero de columnas(cols) que indiquemos.
  • GridLayout()(int rows, int cols, int hgap, int vgap)
    • Idem anterior con la salvedad que podemos indicar la distancia en pixels entre los componente de manera horizontal (hgap) y de manera vertical (vgap).

Podemos ver la diferencia entre los 3 constructores;
el 1ro puso todos los componentes en una sola fila y comluna,
el 2do normal,
y el 3ro tomo distancia entre los componentes de 30px tanto horizontal como verticalmente.

Grid no cuenta con variables de clases. Los métodos más importantes son los accesor(get y set) de los mismo parametros en los constructores para modificarlos cuando desees. Veamos el código nada muy del otro mundo.

  1. package gestores;
  2. import java.awt.*;
  3. import javax.swing.*;
  4. public class Cuadricula {
  5.  
  6.     public static void main(String[] args) {
  7.         JButton btn1 = new JButton("O");JButton btn2 = new JButton("X");
  8.         JButton btn3 = new JButton("O");JButton btn4 = new JButton("O");
  9.         JButton btn5 = new JButton("O");JButton btn6 = new JButton("X");
  10.         JButton btn7 = new JButton("X");JButton btn8 = new JButton("O");
  11.         JButton btn9 = new JButton("X");
  12.         JFrame marco = new JFrame();
  13.         marco.setTitle("GridLayout");
  14.         marco.setSize(278,218);
  15.         marco.setLocationRelativeTo(null);
  16.         marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  17.         marco.setVisible(true);
  18.        
  19.         //GridLayout()(int rows, int cols, int hgap, int vgap)
  20.         marco.setLayout(new GridLayout(3,3, 5,10) );
  21.         marco.add(btn1);marco.add(btn2);
  22.         marco.add(btn3);marco.add(btn4);
  23.         marco.add(btn5);marco.add(btn6);
  24.         marco.add(btn7);marco.add(btn8);
  25.         marco.add(btn9);
  26.     }
  27. }


Clase GridBagLayout

java.lang.Object
java.awt.GridBagLayout

La clase GridBagLayout alinea componentes vertical, horizontal o a lo largo de su línea de base, sin necesidad de que los componentes sean del mismo tamaño, principal diferencia con gridlayout en donde los rectangulos eran necesariamente del mismo tamaño.
Cada componente puede ocupar una o más células, llamada "área de visualización" (display area).

Constructores:

  • Uno y solo uno: GridBagLayout()
    • Crea un gestor de rejilla heterogenea.

Cada objeto de GridBagLayout se asocia con una instancia de la clase GridBagConstraints

  • GridBagLayout gridBag = new GridBagLayout ();
  • GridBagConstraints restrcciones = new GridBagConstraints ();

Las restricciones nos permite modificar las dimensiones de cada rectangulo a medida que se van agregando los componentes al contenedor.


Paso para configurar el GridBagLayout:
  1. Crear el objeto GridBagLayout y el objeto GridBagConstraints como mencionaba antes.

  2. Aplicamos el gestor de diseño al contenedor a través del método setLayout de la clase Container:

    • marco.setLayout(gridBag)

  3. Configurar un atributo de "restricciones"(de la clase GridBagConstraints)

    • restricciones.gridheight = 2;
    • restricciones.weighty = 1.0;
    • restricciones.gridwidth = GridBagConstraints.REMAINDER;

  4. Llamamos al método de clase de GridBagLayout setConstraints(Component comp, GridBagConstraints constraints)
    que necesita un componente(aca lo creamos) y el objeto "restricciones" que modificamos.

    • JButton btn8 = new JButton("Boton 8");
    • gridBag.setConstraints (btn8, restricciones);

  5. Añadimos como siempre el componente que tratamos al contenedor:

    • marco.add(btn8);

Ejemplo:

  1. package gestores;
  2. import java.awt.*;
  3. import javax.swing.*;
  4. public class GridBag {
  5.     public static void main(String[]args){
  6.         JFrame marco = new JFrame();
  7.         marco.setTitle("GridBagLayout");
  8.         marco.setSize(600,300);
  9.         marco.setLocationRelativeTo(null);
  10.         marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  11.        
  12.        
  13.         GridBagLayout gridBag = new GridBagLayout ();
  14.         GridBagConstraints restricciones = new GridBagConstraints ();
  15.        
  16.         marco.setLayout(gridBag);
  17.        
  18.         restricciones.fill = GridBagConstraints.BOTH; //modifica altura y anchura
  19.        
  20.         restricciones.weightx = 1.5; //espacio horizontal extra
  21.         JButton btn1 = new JButton("Boton 1");
  22.         JButton btn2 = new JButton("Boton 2");
  23.         JButton btn3 = new JButton("Boton 3");        
  24.         gridBag.setConstraints (btn1, restricciones);
  25.         gridBag.setConstraints (btn2, restricciones);
  26.         gridBag.setConstraints (btn3, restricciones);        
  27.         marco.add(btn1);marco.add(btn2);marco.add(btn3);
  28.          
  29.         restricciones.gridwidth = GridBagConstraints.REMAINDER;  // Fila final
  30.         JButton btn4 = new JButton("Boton 4");        
  31.         gridBag.setConstraints (btn4, restricciones);      
  32.         marco.add(btn4);
  33.        
  34.         restricciones.weightx = 0.0;  // Restablecer a los valores predeterminados
  35.         JButton btn5 = new JButton("Boton 5");        
  36.         gridBag.setConstraints (btn5, restricciones);      
  37.         marco.add(btn5);
  38.        
  39.         restricciones.gridwidth = GridBagConstraints.RELATIVE;  //-Penúltimo en la fila
  40.         JButton btn6 = new JButton("Boton 6");        
  41.         gridBag.setConstraints (btn6, restricciones);      
  42.         marco.add(btn6);
  43.        
  44.         restricciones.gridwidth = GridBagConstraints.REMAINDER;  // Fila final
  45.         JButton btn7 = new JButton("Boton 7");        
  46.         gridBag.setConstraints (btn7, restricciones);      
  47.         marco.add(btn7);
  48.        
  49.         restricciones.gridwidth = 1;  // Restablecer a los valores predeterminados
  50.         restricciones.gridheight = 2;
  51.         restricciones.weighty = 1.0;
  52.         JButton btn8 = new JButton("Boton 8");        
  53.         gridBag.setConstraints (btn8, restricciones);      
  54.         marco.add(btn8);
  55.        
  56.         restricciones.weighty = 0.0;  // Restablecer a los valores predeterminados
  57.         restricciones.gridwidth = GridBagConstraints.REMAINDER;  // Fila final
  58.         restricciones.gridheight = 1;  // Restablecer a los valores predeterminados
  59.         JButton btn9 = new JButton("Boton 9");      
  60.         JButton btn10 = new JButton("Boton 10");
  61.         gridBag.setConstraints (btn9, restricciones);      
  62.         gridBag.setConstraints (btn10, restricciones);  
  63.         marco.add(btn9);marco.add(btn10);
  64.        
  65.         marco.setVisible(true);
  66.     }
  67. }

Clase GridBagConstraints

java.lang.Object
java.awt.GridBagConstraints

Variables de Instancia (no-static)

anchor - fill - gridheight - gridwidth - gridx

gridy - ipadx - ipady - weightx - weighty


  • public int anchor
    • Este campo se utiliza cuando el componente es menor que su área de visualización.
    • Se determina en donde, dentro del área de visualización, se colocará el componente.
    • Hay tres tipos de posibles valores: orientación relativa, linea de base relativa y absoluto.

  • Los posibles valores de la orientación relativa son:
    • PAGE_START
    • PAGE_END
    • LINE_START
    • LINE_END
    • FIRST_LINE_START
    • FIRST_LINE_END
    • LAST_LINE_START
    • LAST_LINE_END

  • Los posibles valores de la linea de base relativa son:
    • BASELINE
    • BASELINE_LEADING
    • BASELINE_TRAILING
    • ABOVE_BASELINE
    • ABOVE_BASELINE_LEADING
    • ABOVE_BASELINE_TRAILING
    • BELOW_BASELINE
    • BELOW_BASELINE_LEADING
    • BELOW_BASELINE_TRAILING

  • Los posibles valores absolutos son:
    • CENTER
    • NORTH
    • NORTHEAST
    • EAST
    • SOUTHEAST
    • SOUTH
    • SOUTHWEST
    • WEST
    • NORTHWEST

  • public int fill
    • Este campo se usa cuando el área de visualización del componente es mayor que el tamaño requerido del componente.

  • Los posibles valores son:
    • NONE: No cambie el tamaño del componente.
    • HORIZONTAL: Hacer el componente lo suficientemente amplio como para cubrir su área de visualización horizontal, pero no cambian su altura.
    • VERTICAL: Hacer que el componente lo suficientemente alto como para cubrir su área de visualización vertical, pero no cambian su ancho.
    • BOTH: Hacer que el componente llene su área de visualización por completo.

  • public int gridheight
    • Especifica el número de celdas en una columna para el área de visualización del componente.
  • Posibles valores:
    • REMAINDER para especificar que el área de visualización del componente será de "gridy" a la última celda de la columna
    • RELATIVE para especificar que el área de visualización del componente será de "gridy" a la siguiente en su columna

  • public int gridwidth
    • Especifica el número de celdas en una fila para el área de visualización del componente.
  • Posibles valores:
    • REMAINDER para especificar que el área de visualización del componente será de "gridx" a la última celda de la fila
    • RELATIVE para especificar que el área de visualización del componente será de "gridx" a la siguiente en su fila

  • public int gridx
    • Especifica la celda que contiene el borde de inicio del área de visualización del componente, donde la 1ra celda de una fila es gridx =0
    • El valor RELATIVE especifica que el componente se coloca inmediatamente después del componente que se ha añadido antes de este.
    • Por defecto ya es RELATIVE, "gridx" tiene que ser un valor entero no-negativo.

  • public int gridy
    • Especifica la celda en la parte superior del área de visualización del componente, donde la celda más alta tiene gridy = 0
    • El valor RELATIVE especifica que el componente se coloca justo debajo del componente previo.
    • Por defecto ya es RELATIVE, "gridy" tiene que ser un valor entero no-negativo.

  • public Insets insets
    • Este campo especifica el espaciado externo del componente, la cantidad mínima de espacio entre el componente y los bordes de su área de visualización..
    • El valor predeterminado es nuevas inserciones (0, 0, 0, 0).

  • public int ipadx
    • Este campo especifica el margen interno del componente, la cantidad de espacio para agregar a la anchura mínima del componente. La anchura de la componente es al menos su anchura mínima más ipadx píxeles.
    • El valor por defecto es 0.

  • public int ipady
    • Este campo especifica el margen interno del componente, es decir, la cantidad de espacio para agregar a la altura mínima del componente. La altura de la componente es al menos su altura mínima más ipady pixeles.
    • El valor por defecto es 0.

  • public double weightx
    • Especifica cómo distribuir el espacio horizontal extra.
    • El gestor GridBag calcula el valor de una columna para ser el weightx máximo de todos los componentes en una columna.
    • Si el diseño resultante es más pequeño que el área horizontal que necesita para llenar, el espacio adicional se distribuye a cada columna en proporción a su valor.
    • Una columna que tiene un valor de cero no recibe ningún espacio extra.
    • Si todos los valores son "cero"(0), todo el espacio extra aparece entre las rejillas de la celda y los bordes izquierdo y derecho.
    • El valor predeterminado de este campo es 0. pero wightx tiene que ser un valor "double" no negativo.

  • public double weighty
    • Especifica cómo distribuir el espacio vertical extra.
    • El gestor GridBagLayout calcula el valor de una fila para ser el valor máximo de todos los componentes en la misma una fila.
    • Si el diseño resultante es más pequeño que el área vertical que necesita para llenar, el espacio adicional se distribuye a cada fila en proporción a su valor.
    • Una fila que tiene un valor de cero no recibe ningún espacio adicional.
    • Si todos los valores son "cero", todo el espacio extra aparece entre las rejillas de la celda y los bordes superior e inferior.
    • El valor predeterminado de este campo es 0. pero debe ser un valor "doouble" no negativo.


Constructores

  • GridBagConstraints()
    • Crea un objeto GridBagConstraint con todos sus campos establecidos a su valor por defecto.
  • GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
    • Crea una GridBagConstraints objeto con todos sus campos establecidos para los argumentos pasados como parametros.
    • Nota: Debido a que el uso de este constructor dificulta la legibilidad del código fuente, este constructor sólo debe ser utilizado por las herramientas de generación de código de fuente automática.

1 comentario: