No tutorial de hoje iremos trabalhar com o gerenciador de posicionamento e layout GridBagConstraints classe qual se origina a instância GridBagLayout. Trata-se do mais flexível gestor de posicionamento AWT – Abstract Window Toolkit, que é um toolkit gráfico original do Java.

Na sequência do tutorial “JDIALOG: CRIANDO UM TELA GRÁFICA”, continuaremos a construir uma tela gráfica. Assim caberá ao GridBagConstraints a responsabilidade pelo gerenciamento dos botões, campos e outros componentes da interface gráfica. Embora mais complexo é o mais efetivo gestor de layouts para a criação de sistemas desktops.

GERENCIANDO POSIÇÕES DO LAYOUT NO SWING

O GridBagConstraints da biblioteca java.awt, como já mencionado é sem dúvida uma das mais complexas, porém melhor e mais efetiva forma de gerenciar layouts. A definição da documentação do Java sinaliza que a classe GridBagConstraints especifica restrições para os componentes dispostos usando a classe GridBagLayout.

O primeiro passo é a instanciação do objeto da classe GridBagConstraints. Para que possamos a partir do objeto constrains definir alguns parâmetros.

GridBagConstraints gridBagConstraints = new GridBagConstraints();

Começaremos pelos parâmetros de definição da localização dos componentes na tela, tendo como referência os eixos x e y. Entenda, o GridBagLayout possui uma matriz de células, como uma planilha do Excel. Porém cada coluna ou linha dessa matriz pode ter tamanho e comportamento diferentes, bem como cada célula também possuirá as suas variações.

PSICIONANDO O COMPONTENTE NO GRID

Então para definirmos o posicionamento horizontal e vertical respectivamente, ou seja, em que ponto da matriz de células posicionaremos um dado componente na tela, utilizaremos o “grid”.

gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;

CONSTRUINDO UM PAINEL

Mas precisamos de um painel (container) para receber a matriz de células, então o que faremos é “desenhá-lo” antes de iniciarmos o construtor. Assim, iremos instanciar um objeto jPanel e informar que iremos fazer a gestão dos componentes dentro do painel – JPanel.

Private JPanel jPanel = new JPanel(new GridBagLayout());

ADICIONANDO UMA LABEL

O que estamos fazendo é adicionado os componentes dentro do painel para que o JDialog os exiba na tela. Desse modo o primeiro componente que adicionaremos é um “label”. O label é como um rótulo que descreve um outro componente.

private JLabel rotulo1 = new JLabel(“TIME THREAD 1”);

Agora iremos definir a dimensão, adicionar ao painel e posicionar o componente JLabel que acabamos de criar.

rotulo1.setPreferredSize (new Dimension 200, 25);
jPanel.add(rotulo1, GridBagConstraints);

Porém, para que este componente se torne visível temos que adicioná-lo. Antes do setVisible, adicione o componente, seguido da instrução BorderLayout.WEST, que é a responsável por posicionar o componente a esquerda do painel.

add(jPanel, BorderLayout.WEST);

Veja abaixo o resultado dessa implementação.

ADICIONANDO UM JTEXTFILD

O JTextField é um campo de texto, e iremos proceder de forma semelhante ao que fizemos com o JLabel, para adicioná-lo ao painel.

Private JTextField mostraTempo = new JTextFild();

E do mesmo modo iremos definir a dimensão, adicionar ao painel e posicionar o componente JTextField que acabamos de criar. E obedecendo a uma sequência, O JTextField deverá ser posicionado logo após o JLabel. Porém, antes de posicioná-lo tempos que indicar onde ele será posicionado, o local do posicionamento. E o faremos movendo uma posição no eixoy.

gridbagConstraints.gridy ++;

mostraTempo.setPreferredSize(new Dimension(240, 240));
jPanel.add(mostraTempo, gridBagConstraints);

Veja abaixo o resultado dessa implementação do JLabel junto ao JTextField.

Para a implementação dos campos referente a segunda thread proceda da mesma forma.

EM POUCAS PALAVRAS

Algumas IDE’s possuem com o recurso “clique e arrasta”, e geram um excesso de código que dificulta de forma considerável a manutenção posterior do sistema. Dessa forma, uma das vantagens de se aprender a criar uma tela na mão consiste não somente em um maior controle, mas também em um código muito mais limpo. Eu fico por aqui e nos vemos no próximo tutorial onde adicionaremos botões a tela.