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

= Video of the Code Formatting Features in the NetBeans IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Video of the Code Formatting Features in the NetBeans IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Video of the Code Formatting Features in the NetBeans IDE

|===
|This screencast demonstrates some important formatting features in the NetBeans IDE. The screencast demonstrates how to use the following code formatting features available in the Netbeans IDE:

* general indentation
* braces
* imports
* project-specific formatting

This demonstration is based on the Formatting project available in the link:https://netbeans.org/projects/samples/downloads/download/Samples/Java/Formatting.zip[+NetBeans Sample Code Library+].

Authors: Jiri Prox, Alyona Stashkova 
Time: 7:40

link:http://bits.netbeans.org/media/editor-formatting.mp4[+Watch full size/Download+] (.mp4) (Ctrl-Click to download, 19,2 MB)

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


== Related links

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG613[+Using Hints in Source Code Analysis and Refactoring+] in _Developing Applications with NetBeans IDE_
