// 
//     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.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.1 Overview - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 7.1 Overview

Find out what is new and cool in the latest NetBeans 7.1 release. The NetBeans IDE is an integrated development environment for software developers. It provides the tools you need to create professional desktop, enterprise, web, and mobile applications with the Java language, as well as PHP, JavaScript, Groovy and Grails, and C/C++.

NetBeans IDE introduces support for JavaFX 2.0 by enabling the full compile/debug/profile development cycle for JavaFX 2.0 applications. The release also provides significant Swing GUI Builder enhancements, CSS3 support, and tools for visual debugging of Swing and JavaFX user interfaces. Additional highlights include Git support integrated into the IDE, new PHP debugging features, various JavaEE and Maven improvements, and more.

link:http://bits.netbeans.org/media/nb71_overview_video_smaller.mp4[+Download this video.+] [Warning. 63 mb]


 


== Related Links

* link:https://netbeans.org/kb/index.html[+NetBeans IDE Tutorials+]
* link:https://netbeans.org/community/index.html[+NetBeans Community+]
link:/about/contact_form.html?to=3&subject=Feedback:%20Netbeans%207.0%20overview%20screencast[+Send Us Your Feedback+]


