Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Es igual que la composición de GridLayout, con la diferencia que los Componentes no necesitan
tener el mismo tamaño. Es quizá el layout más sofisticado y versátil de los que actualmente
soporta AWT.
En la figura siguiente vemos la imagen generada por un panel que usa el GridBagLayout para
soportar diez botones en su interior:
import java.awt.*;
import java.applet.Applet;
setLayout( gridbag );
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1.0;
add( boton0 );
gridbag.setConstraints( boton1,gbc );
add( boton1 );
gridbag.setConstraints( boton2,gbc );
add( boton2 );
gbc.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( boton3,gbc );
add( boton3 );
gbc.weightx = 0.0;
gridbag.setConstraints( boton4,gbc );
add( boton4 );
gbc.gridwidth = GridBagConstraints.RELATIVE;
gridbag.setConstraints( boton5,gbc );
add( boton5 );
gbc.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( boton6,gbc );
add( boton6 );
gbc.gridwidth = 1;
gbc.gridheight = 2;
gbc.weighty = 1.0;
gridbag.setConstraints( boton7,gbc );
add( boton7 );
gbc.weighty = 0.0;
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.gridheight = 1;
gridbag.setConstraints( boton8,gbc );
add( boton8 );
gridbag.setConstraints( boton9,gbc );
add( boton9 );
Este es el código, AwtGBag.java, que utilizamos para generar la imagen del ejemplo.
Para aprovechar de verdad todas las posibilidades que ofrece este layout, hay que pintar antes en
papel como van a estar posicionados los Componentes; utilizar gridx, gridy, gridwidth y
gridheight en vez de GridBagConstraints.RELATIVE, porque en el proceso de validación del layout
pueden quedar todos los Componentes en posición indeseable. Además, se deberían crear
métodos de conveniencia para hacer más fácil el posicionamiento de los Componentes. En el
ejemplo siguiente, AwtGBagConv.java, creamos el método de conveniencia addComponente()
para la incorporación de nuevos Componentes al layout, lo que hace más sencillo el manejo de
los Constraints:
import java.awt.*;
import java.applet.Applet;
gbc.gridx = gridx;
gbc.gridy = gridy;
gbc.gridwidth = gridw;
gbc.gridheight = gridh;
gridbag.setConstraints( comp,gbc );
add( comp );
setLayout( gridbag );