A classe GridLayout é usada para definir uma matriz de componentes ao longo de uma série de linhas e colunas. Pelo fato de o tamanho de cada linha e coluna ser o mesmo, cada componente de grade tem as mesmas dimensões. Cada novo componente adicionado ao container com o uso de GridLayout fica posicionado no índice seguinte da grade. Se a linha não estiver completa, ele é acrescentado à próxima coluna.
O código a seguir cria um applet que utiliza GridLayout. É apresentada na tela ma matriz 5 x 5 de Buttons.
import java.awt.*;
import java.lang.*;
import java.applet.8;
public class ExemploGridLayout extends Applet
{
// configuração da matriz de números
ublic void init()
{
resize(300,200);
t rowsAcross = 5;
t rowsDown = 5;
tLayout(new GridLayout(rowsAcross,
rowsDown,10,20));
// preenchendo a grade com botões
numéricos
int matrixSize = rowAcross * rowsDown;
for (int i = 0; i < matrixSize;
++i)
{
add(new Button(Integer.toString(i))
);
}
}
}
No final do código, observamos um loop for que acrescenta botões à grade. À medida que o número aumenta, cada Button é adicionado na área de exibição do applet, da esquerda para a direita e de cima para baixo.
GridBagLayout
A classe de layout mais complexa de Java é a GridBagLayout. Embora similar à GridLayout, ela difere de maneira significativa desta por não exigir que os componentes de uma determinada grade possuam o mesmo tamanho. Ela utiliza uma classe auxiliar chamada GridBagConstrains para especificar como o componente deve ser exibido em relação aos outros componentes do Container. GridBagLayout pode garantir uma exibição lógica dos componentes, porque substitui o uso de coordenadas embutidas no código por uma estrutura relativa mostrando como os componentes devem estar visualmente inter-relacionados.
A chave para a compreensão dessa classe é sua estrutura de interação com a classe auxiliar GridBagConstrains. Ambas empregam um sistema de pesos e sinalizadores relativos para determinar como os elementos estarão posicionados e dimensionados.
O código seguinte implementa a classe GridBagLayout.
import java.awt.*;
import java.lang.*;
import java.applet.*;
public class ExemploGridBagLayout extends Applet
{
public void init()
{
Button b;
//configurando área de exibição
resize(300,200;
// criando a classe GridBagLayout
e sua auxiliar...
GridBagLayout g = new GridBagLayout();
setLayout(g);
GridBagConstrains gbc = new GridBagConstrains();
// posiciona uma linha com três
botões de igual tamanho
gbc.fill = GridBagConstrains.BOTH;
// distribui espaço horizontal
iagualmente entre os botões
gbc.weightx = 1.0;
// cria e adiciona os três botões
b = newButton("Número 1");
g.setConstraints(b,gbc);
add(b);
b = new Button("Número 2");
g.setConstraints(b,gbc);
add(b);
b = new Button("Número 3");
gbc.gridwidth = GridBagConstraints.REMAINDER;
g.setConstraints(bb,gbc);
add(b);
// inserindo um botão, um label
e um outro botão que utiliza a área de altura restante
b = new Button("Número 4");
gbc.gridwidth = 1;
gbc.weighty = 1.0;
g.setConstraints(b,gbc);
add(b);
l = new Label("Número 5");
g.setConstraints(l,gbc);
b = new Button("Número 6");
// completa a linha
gbc.gridwidth = GridBagConstraints.REMAINDER;
g.setConstraints(b,gbc);
add(b);
// criando um botão de altura normal
usando insets
// altura normal
gbc.weighty = 0.0;
gbc.gridheight = 1;
gbc.weightx = 0.0;
// insets...
gbc.insets.left = 20;
gbc.insets.right = 20;
b = new Button(Número 7");
g.setConstraints(b,gbc);
add(b);
// acrescenta um campo de texto
na parte inferior
gbc.insets.left = 0;
gbc.insets.right = 0;
TextField t = new TextField("Número
8");
g.setConstraints(t,gbc);
}
}