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

= NetBeans IDE 7.3.1 Overview
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 7.3.1 Overview - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 7.3.1 Overview

In this video you will see an overview of the Java EE 7 features provided by NetBeans IDE 7.3.1. It shows the project templates, samples, file templates, and editor features that enable you to get the most out of Java EE 7.

link:https://netbeans.org/community/releases/73/[+NetBeans IDE 7.3.1+] provides first-class comprehensive support for the newest Java technologies and latest Java enhancements. It is the first IDE providing support for JDK 7, Java EE 7, and JavaFX 2.

link:http://bits.netbeans.org/media/nb731-javaee7-launch-final-with-sound.mp4[+Download this video+] [Size: 6 MB]


 


== Related Links

* link:../../../kb/index.html[+NetBeans IDE Tutorials+]
* link:../intro-screencasts.html[+NetBeans IDE Screencasts+]
* link:../../../community/index.html[+NetBeans Community+]
link:/about/contact_form.html?to=3&subject=Feedback:%20NetBeans%207.3.1%20overview%20screencast[+Send Us Your Feedback+]


