// 
//     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.
//

= Legenda de Feedback Visual do GUI Builder
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Legenda de Feedback Visual do GUI Builder - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Legenda de Feedback Visual do GUI Builder

Este documento descreve o feedback visual que o GUI Builder do IDE (antes chamado de Matisse) fornece durante o processo de criação da GUI do Java.



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

[quote]
----


== Linhas-Guia de Alinhamento

As linhas-guia de alinhamento aparecem somente ao adicionar ou mover componentes, indicando as posições preferenciais nas quais deverão ser ajustados os componentes quando o botão do mouse é liberado. Uma vez posicionadas, as linhas-guia de alinhamento são substituídas por linhas sólidas, ilustrando os alinhamentos comuns compartilhados entre os componentes, assim como os indicadores de ancoramento.


|===
|*Inset* |image::images/legend5.png[] |As inserções são os espaçamentos preferenciais entre os componentes e os contêineres nos quais eles estão localizados. Os insets são sugeridos por linhas-guia pontilhadas horizontais e verticais. 

|*Deslocamento* |image::images/legend30.png[] |Os deslocamentos são os espaçamentos preferenciais entre componentes adjacentes. Os deslocamentos são sugeridos por linhas-guias pontilhadas horizontais e verticais. 

|*Linha de Base* |image::images/legend13.png[] |O alinhamento de linha base é o relacionamento preferencial entre componentes adjacentes que contêm o texto de exibição. O alinhamento de linha de base é sugerido por uma linha-guia horizontal compartilhada. 

|*Borda*

 |

image::images/legend12.png[]

image::images/legend14.png[]

image::images/legend32.png[]

image::images/legend33.png[]

 |
Os alinhamentos de borda (Superior, Inferior, Esquerda e Direita) são as relações de alinhamento possíveis entre componentes adjacentes. Os alinhamentos de borda são sugeridos por linhas-guias pontilhadas horizontais e verticais. 

|*Recuo* |image::images/legend31b.png[] |O alinhamento de recuo é um relacionamento de alinhamento especial em que um componente é localizado abaixo de outro e deslocado ligeiramente para a direita. O alinhamento de recuo é sugerido pela apresentação de duas linhas-guias pontilhadas verticais. 

|*Distância Preferencial* |image::images/legend34.png[] |As distâncias preferenciais (pequeno, médio e grande) são tamanhos de lacunas entre componentes adjacentes. As distâncias preferenciais são sugeridas por linhas-guias horizontais e verticais. 
|===

<<top,início>>


== Indicadores de Ancoramento

Quando os componentes estiverem em posição, os indicadores de ancoramento sólidos aparecem, ilustrando os alinhamentos comuns compartilhados entre componentes.


|===
|*Contêiner* |image::images/legend50.png[] |As âncoras que conectam componentes individuais aos contêineres nos quais elas se localizam são representadas por pequenos indicadores semicirculares com linhas pontilhadas que se estendem da borda do contêiner ao próprio componente. 

|*Componente* |image::images/legend51.png[] |As âncoras que conectam componentes individuais aos componentes adjacentes são representadas por pequenos indicadores semicirculares com linhas pontilhadas que se estendem de um componente ao outro. 
|===

<<top,início>>


== Indicadores de Dimensionamento


|===
|*Mesmo Tamanho* |

image::images/legend28.png[]

image::images/legend29.png[]

 |Mesmo dimensionamento é o estado em que um grupo de componentes (adjacentes ou não) é definido com a mesma largura ou altura. O mesmo dimensionamento é ilustrado pela aparição de pequenos indicadores retangulares sobre a borda superior de cada componente para o qual a propriedade é definida. 

|*Redimensionamento Automático* |

image::images/legend42.png[]

image::images/legend41.png[]

image::images/legend43.png[]

 |
O Redimensionamento Automático é o estado em que a largura ou a altura do componente é definida para se redimensionar dinamicamente no runtime. O redimensionamento automático é indicado pelo estado dos botões de Redimensionamento horizontais e verticais (chamados Alterar redimensionamento horizontal e Alterar redimensionamento vertical) na barra de ferramentas do GUI Builder. Para ativar o Redimensionamento Automático, selecione  ``redimensionável``  na lista que fica na janela Outras Propriedades. 
|===

<<top,início>>


== Realce e Handles

|===
|* Realce* |image::images/legend10.png[] |O realce laranja indica onde um componente selecionado será colocado. 

|*Handles* |image::images/legend11.png[] |Aparecem pequenos handles quadrados em torno do perímetro do componente quando este é selecionado. A ação de clicar, pressionar e arrastar um handle na extremidade de um componente o redimensiona. 
|===

<<top,início>>


----
link:/about/contact_form.html?to=3&subject=Feedback:%20GUI%20Builder%20Visual%20Feedback%20Legend,%20NetBeans%20IDE[+Enviar Feedback neste Tutorial+]



== Consulte Também

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+Implementando GUIs de Java+] em _Desenvolvendo Aplicações com o NetBeans IDE_
* link:../../trails/matisse.html[+Trilha de Aprendizado das Aplicações de GUI do Java+]
* link:../../trails/java-se.html[+Trilha de Aprendizado do Desenvolvimento Geral em Java+]
