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

= Vídeo das Funcionalidades de Formatação de Código no NetBeans IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Vídeo das Funcionalidades de Formatação de Código no NetBeans IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Vídeo das Funcionalidades de Formatação de Código no NetBeans IDE

|===
|Este screencast demonstra algumas funcionalidades de formatação importantes no NetBeans IDE. O screencast demonstra como usar as funcionalidades de formatação de código disponíveis no Netbeans IDE:

* recuo geral
* chaves
* importações
* formatação específica do projeto

Esta demonstração está baseada no projeto de Formatação disponível na link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/Formatting.zip[+Biblioteca de Códigos de Amostra do NetBeans+].

Autores: Jiri Prox, Alyona Stashkova 
Hora: 7:40

link:http://bits.netbeans.org/media/editor-formatting.mp4[+Veja em tela cheia/Download+] (.mp4) (Ctrl-Clique para fazer o download, 19,2 MB)

link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20the%20Code%20Formatting%20Features%20in%20the%20NetBeans%20IDE[+Enviar Feedback neste Tutorial+]
 |  
|===


== Links relacionados

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG613[+Usando Dicas de Análise de Código-fonte e Refatoração+] em _Desenvolvendo Aplicações com o NetBeans IDE_
