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

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

Tour the screencasts below to discover the new and noteworthy features of NetBeans IDE.


== NetBeans IDE 8.0 Overview

|===
|link:java/jdk8-migration-screencast.html[+ +]image::../../images_www/v7/2/nb72-video-thumb.png[]
 |link:../../community/releases/80/index.html[+*NetBeans IDE 8.0*+] delivers full support for the latest Java 8 technologies--Java SE 8, Java SE Embedded 8, and Java ME Embedded 8. The IDE also provides a range of new enhancements for Maven and Java EE with PrimeFaces; new tools for HTML5, in particular for AngularJS; and improvements to PHP and C/C++ support. 

Watch the link:ide/overview-screencast.html[+*NetBeans IDE 8.0 Overview Video*+] to find out what's new and noteworthy in this latest release.
 
|===


== NetBeans IDE 8.0 Screencasts

|===
|image:::images/smartmigration.png[role="left", link="java/jdk8-migration-screencast.html"] 

Time: 14:00
link:http://bits.netbeans.org/media/smart-migration-java8.mp4[+*Download*+] [60 MB]

 |link:java/jdk8-migration-screencast.html[+ Smart Migration to JDK 8+]

This screencast is a guide to the key features of language enhancements in Java 8 and how you can use the IDE to help you migrate your code to Java 8.

 |  |image:::images/primefaces.png[role="left", link="javaee/maven-primefaces-screencast.html"] 

Time: 4:39
link:http://bits.netbeans.org/media/prime-faces-nb8.mp4[+*Download*+] [37 MB]

 |link:javaee/maven-primefaces-screencast.html[+ PrimeFaces Development with NetBeans IDE 8 +]

This screencast demonstrates how you can use NetBeans IDE 8.0 to create a complete CRUD application using Java EE 7, Maven, and PrimeFaces.

 

|image:::images/me8.png[role="left", link="javame/nb_me8_screencast.html"] 

Time: 6:38
link:http://bits.netbeans.org/media/nb_me_8.mp4[+*Download*+] [12 MB]

 |link:javame/nb_me8_screencast.html[+ NetBeans IDE Support for Java ME 8+]

This screencast demonstrates NetBeans IDE support for Oracle Java ME SDK 8 on the Windows operating system.

 |  |image::images/plugins.png[role="left", link="javame/nb_me_plugins_screencast.html"]

Time: 7:05
link:http://bits.netbeans.org/media/nb_me_sdk_plugins.mp4[+*Download*+] [13,9 MB]


 |link:javame/nb_me_plugins_screencast.html[+ Installing and Using Java ME SDK 8.0 Plugins in NetBeans IDE+]

This screencast demonstrates installation and usage of link:http://www.oracle.com/technetwork/java/javame/javamobile/download/sdk/default-303768.html[+Oracle Java ME SDK 8.0 Plugins+] in NetBeans IDE on the Windows operating system.

 
|===


== NetBeans IDE 7.4 Screencasts

|===
|image:::images/jdk8-lambda.png[role="left", link="java/jdk8-nb74-screencast.html"] 

Time: 3:44
link:http://bits.netbeans.org/media/jdk8-gettingstarted.mp4[+*Download*+] [30 MB]

 |link:java/jdk8-nb74-screencast.html[+ *JDK 8 in NetBeans IDE*+]

This screencast demonstrates how to set up NetBeans IDE 7.4 to use JDK 8, together with how to use JDK 8 profile support and lambda expressions.

 |  |image:::images/html5-javaee.png[role="left", link="javaee/javaee-gettingstarted-js-screencast.html"] 

Time: 5:10
link:http://bits.netbeans.org/media/html5-gettingstarted-javaee-screencast.mp4[+*Download*+] [41 MB]

 |link:javaee/javaee-gettingstarted-js-screencast.html[+ JavaScript Client Development in Java EE+]

This screencast shows that you can expose RESTful web service endpoints via a wizard that lets you create JavaScript Backbone.js clients in Java EE applications in NetBeans IDE 7.4.

 

|image:::images/html5-cordova.png[role="left", link="web/html5-cordova-screencast.html"] 

Time: 5:08
link:http://bits.netbeans.org/media/html5-gettingstarted-cordova-final-screencast.mp4[+*Download*+] [36 MB]

 |link:web/html5-cordova-screencast.html[+ *Getting Started with Cordova in NetBeans IDE*+]

This screencast demonstrates how to create HTML5 applications, that is, how to create applications that use HTML, JavaScript, and CSS, and deploy them as native Android or iOS applications via Cordova.

 |  |image:::images/javaee-primefaces.png[role="left", link="javaee/javaee-gettingstarted-pf-screencast.html"] 

Time: 5:05
link:http://bits.netbeans.org/media/javaee-html5-primefaces.mp4[+*Download*+] [63 MB]

 |link:javaee/javaee-gettingstarted-pf-screencast.html[+ Java EE Development with PrimeFaces+]

This screencast shows how easily PrimeFaces applications can be created with Maven and Java EE in NetBeans IDE 7.4.

 

|image:::images/javagui-javafx.png[role="left", link="java/nb_fx_screencast.html"] 

Time: 7:04
link:http://bits.netbeans.org/media/netbeans_fx.mp4[+*Download*+] [19 MB]

 |link:java/nb_fx_screencast.html[+ *JavaFX Support in NetBeans IDE*+]

This screencast demonstrates JavaFX-related features that are implemented in NetBeans IDE 7.4, including the JavaFX runtime classpath, the alignment of JavaFX and Java SE projects and the JavaFX Maven project template.

 |  |image:::images/javame-thumb.png[role="left", link="javame/nb_mesdk_screencast.html"] 

Time: 4:22
link:http://bits.netbeans.org/media/nb_mesdk.mp4[+*Download*+] [6 MB]

 |link:javame/nb_mesdk_screencast.html[+ Setting up NetBeans IDE for Mobile Development on Windows+]

This screencast demonstrates the support for the Java ME SDK in NetBeans IDE. This screencast shows how to activate JavaME plugins and register the Java ME SDK in NetBeans IDE.

 

|image:::images/git-thumb.png[role="left", link="ide/github_nb_screencast.html"] 

Time: 5:52
link:http://bits.netbeans.org/media/github_nb.mp4[+*Download*+] [11 MB]

 |link:ide/github_nb_screencast.html[+ Setting up a GitHub Repository Using NetBeans IDE+]

This screencast demonstrates how to set up a Git repository in NetBeans IDE and put it up to GitHub using the IDE's support for the Git versioning system.

 |  |image:::images/clone_thumb.png[role="left", link="ide/git_nb_ssh_screencast.html"] 

Time: 3:25
link:http://bits.netbeans.org/media/git_nb_ssh.mp4[+*Download*+] [6 MB]

 |link:ide/git_nb_ssh_screencast.html[+ Cloning a Git Repository Using NetBeans IDE+]

This screencast demonstrates how to get a Git project by cloning an existing Git repository from a remote server via the SSH protocol.

 
|===



== More NetBeans IDE Screencasts

Browse the link:../../community/media.html[+NetBeans Media Library+] and the link:http://www.youtube.com/user/netbeansvideos[+NetBeans YouTube Channel+] for additional video tutorials of the NetBeans IDE.

