Você está na página 1de 4

Tudo sobre o GridBagLayout. - Java Free.

org

http://javafree.uol.com.br/artigo/5792/

Login

Registre-se

HOME

NOTCIAS

ARTIGOS

FRUM

WIKI

BUSCA

SOBRE

ENVIAR NOTCIA

CONTRIBUIR

O QUE JAVA?

Home > Artigos > Interfaces Grficas >

Tudo sobre o GridBagLayout.


Publicado por vfpamp em 14/12/2009 - 121.188 visualizaes

comentrios: 27 Por Vitor Pamplona Tudo sobre o GridBagLayout. Trabalhando com Swing voc, frequentemente, criar telas de propriedades. Que so aquelas telas tradicionais com um label e um componente para edio. Um belo exemplo de uma tela como essa a tela de cadastro de cliente, que possui vrios campos, criando uma dificuldade a mais na hora da confeco da tela. O GridBagLayout um gerenciador de layout para swing muito flexvel. Similar ao GridLayout, o GridBagLayout possui uma matriz de clulas, porm cada coluna ou linha da matriz pode ter um tamanho e comportamento diferente, assim como cada clula tambm possuir as suas variaes. O layout to flexvel que ao inluir um componente em determinada clula, voc at pode definir que o mesmo componente ocupar vrias clulas.

GridBagConstraints Este layout tem como base a utilizao de um GridBagConstraints para cada componente inserido. este objeto que proporcionar a liberdade que queremos com o layout. A GridBagConstraints uma classe que no possui mtodos, ela servir simplesmente para armazenar as informaes para cada componente adicionado. Vamos dar uma olhada nas propriedades da classe:

anchor: Essa propriedade utilizada somente quando o tamanho do componente menor que a rea que lhe foi concedida. Normalmente, queremos que nosso
componente ocupe toda a rea disponvel, mas em casos especiais, no podemos redimensionar os componentes. Sendo assim, o layout precisa saber em que posio da clula deixar o componente. Os valores para esse campo so de dois tipos: Absolutos (CENTER, NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, e NORTHWEST) e Relativos (PAGE_START, PAGE_END, LINE_START, LINE_END, FIRST_LINE_START, FIRST_LINE_END, LAST_LINE_START and LAST_LINE_END). O valor padro CENTER.

fill: Determina como redimensionar o componente. Valores possveis para esta propriedade so: NONE: No redimensiona o componente HORIZONTAL: Redimensiona horizontalmente, fazendo com que o mesmo ocupe toda a rea horizontal na clula VERTICAL: Redimensiona verticalmente, fazendo com que o mesmo ocupe toda a rea vertical na clula BOTH: Redimensiona para ambas as direes. Valor padro NONE gridx e gridy: Especificam a posio X,Y para adicionar o componente. No necessrio alterar seus valores, pois seu valor padro a constante RELATIVE e
portanto o layout adicionar aps o ltimo componente que foi colocado. - gridx: Permite especificar qual a posio absoluta horizontalmente que o componente ser adicionado. - gridy: Permite especificar qual a posio absoluta verticalmente que o componente ser adicionado.

gridheight e gridwidth Especificam o tamanho do componente baseado em clulas. com essa propriedade que voc indicar que um componente seu ocupar
duas clulas, ou ocupur tantas quanto forem necessrias para ir at o final da tela. Lembrem-se clulas e no pixels Nestes valores podem ser utilizadas duas constantes: REMAINDER e RELATIVE. REMAINER far com que o componente se estique at a ltima clula. J o RELATIVE far com que o componente ocupe todas as casas com excesso da ltima. - gridheight: Especifica o nmero de clulas que o componente ocupar verticalmente. Valor padro 1. - gridwidth: Especifica o nmero de clulas que o componente ocupar horizontalmente. Valor padro 1.

insets: Indica as distncias entre os componentes do lauout. Um Insets possui valores para as 4 direes, cima, baixo, direita e esquerda. Permitindo com isso muita
flexibilidade no gerenciador. Valor padro new Insets(0, 0, 0, 0)

weight: Essas propriedades especificam um percentual de crescimento da clula, no do componente, quando a mesma precisa ser redimensionada. dito isso, pois se o componente no pode se redimensionar, pois a propriedade fill do constraint afirma isso, o componente no vai sofrer as alteraes, mas a clula ir aumentar. Com este layout possvel informar que uma clula redimensionar 75% e o outra 25%, portanto o primeiro componente receber 3 vezes mais tamanho do que o segundo. O valor padro 0 e os valores percentuais so dados em casas decimais, por exemplo: 0.03 igual a 3%, 1.00 igual a 100% e por a vai. - weightx: Peso em x. Especifica um peso no redimensionamento. Este peso ser utilizado para um clculo que o layout faz para determinar quais as clulas iro redimensionar horizontalmente, quais no iro, e quais aumentaro mais que os outros. - weighty: Peso em y. Especifica um peso no redimensionamento. Este peso ser utilizado para um clculo que o layout faz para determinar quais as clulas iro redimensionar verticalmente, quais no iro, e quais aumentaro mais que os outros. ipadx e ipady Determina um adicional nas bordas internas do componenete. Essa propriedade modifica o tamanho mnimo de cada componente. O tamanho mnimo ser o ipad + o valor mnimo do componente. - ipadx: Valor para ser adicionado horizontalmente. - ipady: Valor para ser adicionado verticalmente.
Exemplos. Como primeiro exemplo iremos utilizar todos os atributos como default. Relembrando os atributos default: anchor: CENTER fill: NONE

1 de 4

23/02/2011 22:09

Tudo sobre o GridBagLayout. - Java Free.org

http://javafree.uol.com.br/artigo/5792/

gridx: RELATIVE gridy: RELATIVE gridheight: 1 gridwidth: 1 insets: Insets(0, 0, 0, 0) weightx: 0 weighty: 0 ipadx: 0 ipady: 0
Portanto ele ficar assim:

Neste exemplo1 criamos um layout com as clulas com o mesmo tamanho dos botes. Portanto nenhuma das propriedades invocada, pois o tamanho das clulas igual ao tamanho dos componentes. Sendo assim, nenhum ajuste precisa ser feito pelo layout. Analizando o ipad Vamos fazer um teste de ipadx e ipady. Coloque esses valores aps o setLayout e execute o programa.

Os dois botes ficaro com o tamanho de width = 141 e height= 225. Sem isto o tamanho dele era width = 91, height = 25 Retire a linha adicionada para seguirmos para o prximo teste. Analizando o insets Adicione a seguinte linha depois do setLayout;

Isto far com que cada componente adicionado crie um espao de 10 pixels para cada uma das direes: acima, abaixo, direita e esquerda. Portanto a distncia entre o boto da direita e o da esquerda 20 pixels. Retire a linha adicionada para seguirmos para o prximo teste. Analizando o weight Se voc adicionar as linhas abaixo depois do setLayout, ir alterar o tamanho das clulas, como foi explicado anteriormente.

2 de 4

23/02/2011 22:09

Tudo sobre o GridBagLayout. - Java Free.org

http://javafree.uol.com.br/artigo/5792/

Esta alterao far com que o GridBagLayout ocupe todo o frame, e aumente tambm o tamanho das clulas. Portanto agora, o tamanho das clulas 300 de largura x 600 de altura. Agora podemos perceber que os dois botes ficam centralizados nas suas clulas, porque esto ancorados no centro. Como o fill deles NONE, eles no se redimensionram. Deixe esta linha para continuarmos os testes. Analizando o anchor Adicione a seguinte linha aps o setLayout;

Isto far com que os botes permaneam no sudeste de suas clulas. Portanto, aparecero no canto inferior direito. Faa testes com as outras constantes, lembrando que as relativas so mais complexas de analisar. Analizando o fill Vamos fazer nosso boto preencher toda a tela e se tornar redimensionvel.

Iro aparecer como se estivessem em um BorderLayout. S que ao redimensionar, ambos estaro recebendo a mesma quantidade de pixels para aumentar de tamanho. Assim, eles possuiro sempre as mesmas alturas e larguras. Altere os valores do weightx e weighty para cada um dos botes. Ser interessante ver como funciona o clculo do redimensionamento De uma olhada neste exemplo:

Agora o boto esquerda ocupar sempre 75% da tela, enquanto o boto da direita, sempre 25% Analizando gridx e gridy De uma olhada neste cdigo:

Este cdigo est setando as posies x e y para tornar mais malevel a criao das telas. Analizando gridwidth e gridheight

3 de 4

23/02/2011 22:09

Tudo sobre o GridBagLayout. - Java Free.org

http://javafree.uol.com.br/artigo/5792/

Baseado no cdigo do exemplo anterior criei este outro. Com apenas a mudana no primeiro boto, codifiquei o gridwidth para ter o tamanho de duas clulas. E o layout assim entendeu.

Por aqui termina os nossos testes com esse layout. Produtividade Como possvel ser produtivo ao desenhar uma tela dessas a mo? Simples, estipule padres nas telas. Com esses padres criaremos um componente especfico para a nossa aplicao, tornando a fabricao das telas muito mais rpida. Digamos que a nossa aplicao tem como padro colocar os Labels com alinhamento a esquerda, os componentes de edio iro ocupar todo o espao disponvel at o final da tela. Caso houverem duas colunas de componentes de edio na tela o espao horizontal ser dividido entre os dois componentes. Ao ser redimensionada, somente os componentes de edio podero aumentar o tamanho. Os outros ficaro imveis. Bom, agora s apelar para Orientao a Objeto e detonar um componente para criao rpida de telas. Segue um exemplo abaixo:

Valeu pessoal, espero que vocs tenham gostado. Vitor Pamplona est cursando o 4 ano de Cincias da Computao da Universidade Regional de Blumenau. entusiasta do Prevayler e XP, mas participa profissionalmente de um projeto envolvendo Swing, J2EE e Hibernate. um dos administradores do portal sobre Java e Software Livre JavaFree.com.br comentrios: 27

Home

Sobre

Anuncie

RSS Notcias RSS Frum

O JavaFree.org uma comunidade java formada pela coolaborao dos desenvolvedores da tecnologia java. A publicao de artigos alm de ajudar a comunidade java, ajuda a dar maior visibilidade para o autor. Contribua conosco. JavaFree um site do Grupo DevMedia www.devmedia.com.br | www.javafree.org | www.mrbool.com |

4 de 4

23/02/2011 22:09