// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Criando um Form Java Avançado usando o GridBag Customizer
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Criando um Form Java Avançado usando o GridBag Customizer - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Criando um Form Java Avançado usando o GridBag Customizer

Escrito por Jan Stola, Tomas Pavek e Alyona Stashkova

Este tutorial é a segunda série de duas partes que demonstra como criar um form Java usando as funcionalidades avançadas do GridBag Customizer do NetBeans IDE.
Esta série tem a intenção de ser um guia para mostrar como é possível criar o layout de seus componentes da GUI sem escrever manualmente seu código de layout e, a seguir, executar alterações adicionais em um form existente para implementar um layout alvo específico que seja necessário ao seu projeto.

Cada documento nesta série aborda conjuntos específicos de funcionalidades.

* Parte 1: link:../java/gbcustomizer-basic.html[+Criando um Form Java Básico usando o GridBag Customizer+]
* Parte 2: Criando um Form Java Avançado usando o GridBag Customizer

O link:../java/gbcustomizer-basic.html[+primeiro tutorial da série+] demonstrou como modificar um form Java simples, usando as funcionalidades básicas do GridBag Customizer do NetBeans IDE. Neste tutorial você irá aprender como usar as funcionalidades avançadas do GridBag Customizer para alterar o layout do form existente.


image::images/netbeans-stamp-80-74.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.1 e posterior"]


*Para seguir este tutorial, são necessários os recursos e o software a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:http://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.1 ou posterior 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |Versão 6, 7 ou 8 

|link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252Fgbcustomizer-advanced-tutorial.zip[+gbcustomizer-advanced-tutorial.zip+] |Um arquivo compactado com o projeto de demonstração contendo os layouts inicial e de destino do tutorial. 
|===

*Observações:*

* Você pode fazer download do projeto que é usado como um ponto inicial para esta série como um arquivo compactado  ``.zip`` .
* Este tutorial concentra-se na criação do layout somente para o contêiner. A adição de funcionalidade na GUI está fora de seu escopo.


== Abrindo o Projeto de Exemplo

Antes de começar a efetuar o layout dos componentes com a ajuda do GridBag Customizer, faça o download do link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252Fgbcustomizer-advanced-tutorial.zip[+gbcustomizer-advanced-tutorial.zip+], extraia o projeto  ``GridBagCustomizerAdvancedTutorial``  em seu disco rígido e abra-o no NetBeans IDE.

1. Faça download e descompacte o projeto link:https://netbeans.org/projects/samples/downloads/download/Samples%252FJava%252Fgbcustomizer-advanced-tutorial.zip[+gbcustomizer-basic-tutorial.zip+] em qualquer lugar no computador.
2. Na guia Projetos do NetBeans IDE, clique em Abrir Projeto no menu Arquivo, navegue para o projeto  ``GridBagCustomizerAdvancedTutorial``  que você extraiu na etapa anterior e clique em Abrir Projeto. A pasta do projeto pode estar contida em uma pasta que também é chamada de  ``GridBagCustomizerAdvancedTutorial`` .

*Observação:* o projeto  ``GridBagCustomizerAdvancedTutorial``  usa as bibliotecas de classe  ``Junit``  e  ``JUnit 4`` , que estão localizadas na Central de Atualização. Você precisa clicar em Resolver Problemas na caixa de diálogo Abrir projeto, em seguida, clique em Resolver na caixa de diálogo Resolver Problemas de referência e instale o plug-in JUnit seguindo as instruções no Instalador NetBeans IDE. Quando a instalação for concluída, clique em Finalizar para fechar a caixa de diálogo do Instalador do NetBeans IDE e, em seguida, clique em Fechar para fechar a caixa de diálogo Resolver Problemas de Referência.



. Expanda  ``Pacotes de Código-fonte > tutorial``  e clique duas vezes em  ``ContactsAdvancedInitial.java`` . 
O form de exemplo é aberto na view Design do GUI Builder.

[.feature]
--
image::images/sampleform-small.png[role="left", link="images/sampleform.png"]
--


== Chamando o GridBag Customizer

Para exibir o GridBag Customizer, conclua as seguintes etapas:

1. Na view Design, selecione o form JFrame.
2. Clique com botão direito do mouse no form e escolha  ``Personalizar Layout`` .
A caixa de diálogo Personalizar Layout é aberta, conforme mostrado abaixo.

[.feature]
--
image::images/customizerdialog-small.png[role="left", link="images/customizerdialog.png"]
--

*Observação:* neste tutorial, o GridBagLayout já está definido. Caso você trabalhe com outro form, na etapa 2 acima, clique com o botão direito do mouse no form e escolha  ``Definir Layout``  >  ``Layout do Grid Bag``  (isso ativa o item de menu  ``Personalizar Layout`` ) e conclua o procedimento.


== Funcionalidades Avançadas

Nesta seção, você usará as funcionalidades avançadas do GridBag Customizer para reorganizar os componentes do form  ``ContactsAdvancedInitial``  de acordo com o layout alvo abaixo mostrado.

image::images/targetlayout.png[]

*Observação:* para exibir o layout alvo em seu NetBeans IDE, na guia Projetos, expanda  ``Pacotes de Código-fonte > tutorial``  e clique duas vezes em  ``ContactsAdvancedFinal.java`` . 
O form  ``ContactsAdvancedFinal``  com o layout alvo é aberto na view Projeto do GUI Builder.


=== Inserindo Nova Linha

A seção  ``Telefone``  de um form existente apresenta três entradas de telefone. Para aprimorá-la e adicionar um campo extra de label e texto (por exemplo, nome do usuário Skype entre  ``Telefone Celular:``  e  ``Telefone Residencial:`` ), crie uma nova linha aqui como segue:

1. Na caixa de diálogo Personalizar Layout, clique com o botão direito do mouse no cabeçalho da linha que contém as informações de  ``Telefone Residencial:`` .
2. Escolha  ``Inserir Linha Antes`` .

image::images/insertrow.png[]

Uma nova linha é adicionada como na figura a seguir.

image::images/rowinserted.png[]


=== Adicionando Novos Componentes

Para adicionar um novo label e campo de texto à linha recém-adicionada, execute as seguintes etapas:

1. Clique com o botão direito do mouse na primeira célula da linha recém adicionada.
2. No menu de contexto, escolha  ``Adicionar Componentes > Controles do Swing > Label`` , como mostrado abaixo.

[.feature]
--
image::images/addcomponent-small.png[role="left", link="images/addcomponent.png"]
--

O  ``JLabel1``  realçado é exibido na primeira célula.



. Clique com o botão direito do mouse na segunda célula da linha recém-adicionada.


. No menu de contexto, escolha  ``Adicionar Componentes > Controle do Swing >Campo de Texto`` .
O  ``JTextField1``  realçado é exibido na segunda célula.

image::images/highlightedtextfield.png[]

Após os componentes terem sido adicionados, suas restrições do gridbag precisam ser especificadas para os alinhar com outros componentes.

Com o componente  ``JTextField1``  selecionado na Área da Grade, faça o seguinte na Folha de Propriedades:

1. Na caixa de combinação Largura da Grade, insira  ``3``  e pressione Enter.
2. Na caixa de combinação Preencher, selecione  ``horizontal`` .
3. Na caixa de combinação Ancorar, navegue para baixo e selecione  ``Linha base`` .
4. No campo de texto Espessura X, insira  ``1.0``  e pressione Enter.

image::images/textfieldconstraints.png[]

Na Área da Grade, selecione o componente  ``JLabel1``  e especifique sua restrição de  ``Âncora``  navegando para baixo e selecionando  ``Linha Base à Direita``  na Folha de Propriedades.

Selecione os dois componentes  ``JLabel1``  e  ``JTextField1``  na Área da Grade, clique no botão Procurar (image::images/browsebutton.png[]) à direita do campo de texto  ``Insets`` . A caixa de diálogo  ``Insets``  é exibida. Insira  ``5``  no campo de texto  ``Superior:``  e clique em OK.

O form deve se parecer como mostrado abaixo.

image::images/constraintsset.png[]

*Observação:* O GridBag Customizer ajuda a adicionar, remover e alterar a posição dos componentes no layout. Para alterar as propriedades dos componentes no layout, como o plano de fundo ou texto, use a janela GUI Builder Design.

Para definir o texto de exibição para o  ``JLabel1`` , faça o seguinte:

1. Clique em Fechar para sair da caixa de diálogo Personalizar Layout.
2. Na view Design, selecione o componente  ``JLabel1``  e pressione F2 (alternativamente, selecione Editar Texto no menu de contexto).
3. Delete o texto selecionado e insira  ``Skype:`` .
4. Pressione Enter.

Para remover o texto do componente  ``JTextField1`` , conclua as seguintes etapas:

. Na view Design, selecione o componente  ``JTextField1``  e pressione F2 (alternativamente, selecione Editar Texto no menu de contexto).
. Delete o texto selecionado e pressione Enter.


=== Reorganizando o Layout

O GridBag Customizer pode economizar seu tempo e esforço ao reposicionar rapidamente os componentes do form como desejado.

Para alterar o layout da seção  ``Telefone``  e posicionar quatro campos de texto existentes de uma coluna para duas colunas com dois campos de texto, conclua as seguintes etapas:

1. Clique com o botão direito do mouse no form e escolha  ``Personalizar Layout``  a partir do menu de contexto.
2. Na caixa de diálogo Personalizar Layout, pressione Ctrl+clique nos quatro componentes  ``JTextField``  para selecioná-los.
3. Arraste a borda esquerda dos campos de texto para a esquerda e solte-os para que os campos de texto ocupem apenas a segunda coluna de grade, em outras palavras, para que eles não mais ocupem a terceira e quarta coluna de grade.

image::images/textfieldsonecolumn.png[]

O GridBag Customizer pode redimensionar diversos componentes juntos, portanto, criando espaço para a segunda coluna de campos de texto.



. Clique fora do form para cancelar a seleção dos campos de texto redimensionados.


. Pressione Ctrl e clique para selecionar todos os  ``Skype:``  e  ``Telefone Residencial:``  dos componentes  ``JLabel``  e  ``JTextField``  na seção  ``Telefone`` .


. Posicione o cursor sobre a seleção e arraste-o para a direita dos dois campos superiores de texto.

image::images/movesecondcolumn.png[]

*Observação:* Antes de arrastar, assegure-se de que o cursor não mudou para uma seta de duas direções, caso contrário, você redimensionará a seleção.

Após mover os componentes, o form deveria se parecer com o exibido abaixo.

image::images/extrarows.png[]

Para descartar as linhas 10 e 11 redundantes (índices de linha 9 e 10 respectivamente), clique com o botão direito do mouse nos cabeçalhos das linhas e escolha  ``Excluir Linha``  no menu de contexto.

A seção  ``Telefone``  tornou-se mais compacta.

image::images/textfieldsmoved.png[]

Para corrigir o espaço da segunda coluna aqui, faça como segue:

1. Pressione Ctrl+Clique nos labels  ``Skype:``  e  ``Telefone Residencial:``  para selecioná-los na Área da grade.
2. Clique no botão Procurar (image::images/browsebutton.png[]) à direita do campo de texto  ``Insets`` .
A caixa de diálogo  ``Insets``  é exibida.


. Insira  ``5``  no campo de texto  ``Esquerda:``  e clique em OK.


=== Introduzindo Subcontêineres

O layout com base na grade algumas vezes introduz dependências desnecessárias que precisam ser solucionadas por meio de subcontêineres.

Se você clicar no botão Layout de Teste na barra de ferramentas (image::images/testlayoutbutton.png[]) e testar o redimensionamento horizontal do layout atual, você observará que o espaço indesejado é criado ao redor dos botões Procurar, OK e Cancelar.

[.feature]
--
image::images/unwantedspace-small.png[role="left", link="images/unwantedspace.png"]
--

Isso acontece porque a quarta coluna compreende os campos de texto e os botões (os componentes que deveriam crescer e os componentes que não deveriam crescer, respectivamente). É preciso modificar o layout para que o espaço adicional em torno do botão  ``Procurar``  seja consumido pelos campos de texto  ``Rua``  e  ``Cidade:`` . O layout atual assegura que a borda direita dos campos de texto  ``Rua:``  e  ``Cidade:``  esteja na mesma posição vertical que a borda esquerda do campo de texto  ``Telefone Residencial:`` . Para tornar estas posições independentes, conclua as seguintes etapas:

1. Pressione Ctrl+clique no campo de texto  ``Rua:``  e no botão  ``Procurar``  à direita dele para selecioná-los.
2. Clique com o botão direito do mouse e escolha  ``Colocar no Contêiner``  no menu de contexto.

[.feature]
--
image::images/enclose-small.png[role="left", link="images/enclose.png"]
--

Depois que componentes forem incluídos em um subcontêiner, a borda entre o label  ``Telefone Residencial:``  e o campo de texto não afeta mais a borda entre o campo de texto  ``Rua``  e o botão.

*Observação:* A ação  ``Incluir no Contêiner``  cria um novo subcontêiner nas células ocupadas pelos componentes selecionados. Ela move os componentes selecionados em um novo contêiner recém-incorporado, mas preserva suas posições relativas e outras restrições de layout.

Repita as duas etapas acima listadas para o campo de texto  ``Cidade:``  e para o botão  ``Procurar``  à direita dele para incorporá-los em um subcontêiner como mostrado abaixo.

image::images/enclosecity.png[]

Agora você deseja corrigir o espaço indesejado em torno dos botões  ``OK``  e  ``Cancelar`` , como segue:

1. Clique em Fechar para cancelar a seleção do incorporado em componentes do subcontêiner, clique com o botão direito do mouse no form e escolha  ``Personalizar Layout``  no menu de contexto.
2. Pressione Ctrl+Clique nos botões  ``OK``  e  ``Cancelar``  na parte inferior do form para selecioná-los.
3. Clique com o botão direito do mouse e escolha  ``Incluir no Contêiner``  a partir do menu de contexto.
Um novo subcontêiner é criado para os dois botões.

image::images/subcontainerbuttons.png[]

*Observação:* Nenhum dos componentes no subcontêiner é redimensionável. Portanto, eles são colocados próximos um do outro no centro do contêiner, que é a ancoragem default.

Para alterar a ancoragem de todo o subcontêiner, conclua as seguintes etapas:

1. Certifique-se de que o subcontêiner com os botões  ``OK``  e  ``Cancelar``  é selecionado e clique no botão de seta (image::images/arrowbutton.png[]) à direita da caixa de combinação de  ``Âncora`` .
2. Role a tela para baixo e escolha  ``Fim da Linha``  na lista.

image::images/subcontainerlineend.png[]

O layout parece bom, mas o subcontêiner com os botões  ``OK``  e  ``Cancelar``  ocupa somente as duas últimas células na última linha.
Caso os botões  ``OK``  e Cancelar `` se tornem mais largos (por exemplo, durante a tradução em outro idioma), eles empurrarão as bordas direitas dos campos de texto `` Telefone Comercial: `` e `` Telefone Celular: ``. Para evitar este problema potencial e deixar que o subcontêiner ocupe todas as células na linha inferior, selecione o subcontêiner e arraste sua borda esquerda para o início da linha. `` 

 ``image::images/subcontainerresized.png[]

O subcontêiner ocupa todas as células na linha inferior.

 


=== Navegando entre Contêineres

Para adicionar um componente a um subcontêiner (por exemplo, um botão  ``Ajuda``  para os botões  ``OK``  e  ``Cancelar``  existentes), é preciso alternar do contêiner principal para o subcontêiner antes de editar seu último layout.

Conclua as etapas abaixo listadas para adicionar um botão em um subcontêiner existente:

1. Clique no subcontêiner com os botões  ``OK``  e  ``Cancelar``  para selecioná-lo.
2. Clique com o botão direito do mouse no contêiner para exibir o menu de contexto e escolha  ``Criar Este Contêiner`` .

[.feature]
--
image::images/designsubcontainer-small.png[role="left", link="images/designsubcontainer.png"]
--



. Clique com o botão direito do mouse no cabeçalho da segunda coluna e escolha  ``Inserir Coluna Após``  a partir do menu de contexto.
Uma célula vazia para o novo botão é exibida.

[.feature]
--
image::images/emptycell-small.png[role="left", link="images/emptycell.png"]
--



. Clique com o botão direito do mouse na célula recém-criada e escolha  ``Adicionar Componente``  >  ``Controles do Swing``  >  ``Botão``  a partir do menu de contexto.
Um novo botão  ``jButton1``  é adicionado.

[.feature]
--
image::images/newbutton-small.png[role="left", link="images/newbutton.png"]
--



. Clique no botão de Âncora Relacionado à Linha de Base (image::images/baselineanchor.png[]) no Personalizador de Propriedades para alinhar o botão Novo com os dois existentes na linha.


. Clique no botão Procurar (image::images/browsebutton.png[]) à direita do campo de texto Insets. A caixa de diálogo Insets é exibida. Insira 5 no campo de texto Superior: e clique em OK.


. Para verificar a aparência do contêiner principal, clique com o botão direito do mouse no subcontêiner desenhado e escolha  ``Criar Contêiner Pai``  no menu de contexto.

image::images/designparentcontainer.png[]

*Observação:* O menu de contexto não é exibido se você clicar com o botão direito do mouse nos botões.

A criação do layout foi concluída.
Falta uma alteração final não relativa ao layout do contêiner.
Para renomear o botão, conclua as seguintes etapas:

1. Clique em Fechar para sair da caixa de diálogo Personalizar Layout.
2. Na view Design, selecione o componente  ``JButton1``  e pressione F2 (se preferir, selecione Editar Texto a partir do menu de contexto).
3. Delete o texto selecionado e insira  ``Ajuda`` .
4. Pressione Enter.

image::images/finallayout.png[]


== Resumo

Neste tutorial, você modificou um form existente ao adicionar novos componentes, ao inserir linhas, etc. Ao criar o layout, você aprendeu como usar as funcionalidades avançadas do GridBag Customizer para reorganizar o layout do form.

Vá para link:../java/gbcustomizer-basic.html[+Criando um Form Java Básico usando o GridBag Customizer+]

<<top,início>>

link:/about/contact_form.html?to=3&subject=Feedback:%20Designing%20an%20Advanced%20Java%20Form%20Using%20the%20GridBag%20Customizer[+Enviar Feedback neste Tutorial+]


== Consulte Também

Você agora completou o tutorial Criando um Form Java Básico usando o GridBag Customizer. Para obter informações sobre como adicionar funcionalidade às GUIs que você cria, consulte:

* link:gui-functionality.html[+Introdução à Construção de GUIs+]
* link:gui-image-display.html[+Manipulando Imagens em uma Aplicação da GUI+]
* link:http://wiki.netbeans.org/NetBeansUserFAQ#GUI_Editor_.28Matisse.29[+ FAQ do GUI Builder+]
* link:../../trails/matisse.html[+Trilha de Aprendizado das Aplicações de GUI do Java+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Implementando GUIs de Java+] em _Desenvolvendo Aplicações com o NetBeans IDE_

<<top,início>>

  `` 

