// 
//     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 Platform Learning Trail
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans Platform Learning Trail - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans Platform Learning Trail
:reviewed: 2022-01-14
include::../../inc/database.adoc[]

== What is the NetBeans Platform?

The NetBeans Platform is a broad Java framework on which you can base large desktop applications. 

See link:{wikipedia}List_of_NetBeans-based_software[a list of NetBeans based applications]
that have been built on top of the NetBeans platform.

NOTE: The fact that we use the NetBeans Platform to build the NetBeans IDE does not mean that
you can only build IDEs with it. People design planes, manage airports and harbors, manage satellite
earth stations, build passenger information systems, design radar systems, play music, paint complex
graphs and more using the NetBeans Platform.

The NetBeans Platform contains APIs that simplify the handling of windows,
actions, files, user selection and many other things typical in desktop based
applications. This greatly makes things easier for you, reducing the
time-to-market required to create great applications.

Of course great power comes with great responsiblity, so you have to learn
how to use the NetBeans Platform before taking advantage of its full potential.
This page may be of help.

== Reference

This section contains links to books, refcards, blogs and videos that you
may consider useful while learning the NetBeans Platform.

=== Books

This is a list of books that may help you get started. Some of them are
somewhat old, but NetBeans main concepts have not evolved that much, and most
of them are still up to date.

* link:https://leanpub.com/nbp4beginners[+"Apache NetBeans Platform for Beginners"+]
* link:https://link.springer.com/book/10.1007/978-1-4302-4102-7[+"The Definitive Guide to NetBeans Platform 7"+]
* link:https://www.packtpub.com/netbeans-platform-6-9-developers-guide/book[+"NetBeans Platform 6.9 Developer's Guide"+]
* link:https://link.springer.com/book/10.1007/978-1-4302-2418-1[+"The Definitive Guide to NetBeans Platform 6.5"+]
* link:https://www.amazon.com/Rich-Client-Programming-Plugging-NetBeans/dp/0132354802[+"Rich Client Programming: Plugging into the NetBeans Platform"+]

=== Reference cards

The dzone link:https://dzone.com/refcardz/netbeans-platform-70[Essential NetBeans Platform Refcard] may be of interest to you.

=== Wiki

Our wiki's xref:../../wiki/DevFaqIndex.adoc[+NetBeans Developer FAQ+] has interesting "tricks" you may want to take a look at.  
xref:../../wiki/NbmIdioms.adoc[NetBeans APIs idioms] is also useful to know the answers to many frequent questions.

=== Blogs
Some blogs you may find of interest:

* The link:https://blogs.apache.org/netbeans/[Apache NetBeans blog].
* link:http://wiki.apidesign.org/wiki/Main_Page[wiki.apidesign.org] by Jaroslav Turach, NetBeans main architect.
* xref:../../blogs/geertjan/index.adoc[Geertjan Wielenga]  (archived)
* link:http://blogs.kiyut.com/tonny/[+Tonny Kohar+].

=== Videos

We have a link:https://www.youtube.com/user/NetBeansVideos[YouTube channel] with many videos
you may want to check.

=== Screencasts

* link:http://prezi.com/b5ntwnpvu9j8/free-netbeans-platform-crash-course/[+Slides: Free NetBeans Platform Crash Course+]
* xref:../../tutorials/nbm-10-top-apis.adoc[+Video: Top 10 NetBeans APIs+]

=== Community-Contributed Docs

The community has also contributed documentation along the years. Let us know if you want yours included here!

* link:http://wiki.apidesign.org/wiki/Main_Page[wiki.apidesign.org] by Jaroslav Turach, NetBeans main architect.
* link:http://tdamir.blogspot.com/2007/12/ddl-visualizer-visualize-sql-script.html[+DDL Visualizer: Visualize SQL Script with NetBeans+], by Damir Tesanovic
* link:http://blogs.kiyut.com/tonny/2007/10/18/customize-netbeans-platform-splash-screen-and-about-dialog/[+Customize the Splash Screen and About Dialog+], by Tonny Kohar
* link:https://dzone.com/articles/quickstart-guide-language-supp[+Quick Start: Creating Language Tools In NetBeans IDE+], by Jordi R. Cardona
* link:https://vieiro.net/apuntes/swingnbrcp/[The NetBeans Platform on Standalone Swing Applications], by Antonio Vieiro, explains how to use some NetBeans APIs in a plain Swing application.

=== API documentation

<<API,We've moved the API list to the end of this page>>.

== NetBeans Platform Tutorials


=== Contributing

We have ported the NetBeans Tutorials to this site, but some of the tutorials need a review.

You can help us improve the tutorials following xref:contributing.adoc[these contribution guidelines].

* For historical reasons, the xref:platform/index.adoc[NetBeans Platform Learning Trail] has also a list of tutorials you may want to check.

=== Introductory tutorials

* The xref:../../tutorials/nbm-runtime-container.adoc[+Runtime Container Tutorial+] explains how NetBeans works internally.
* xref:../../tutorials/nbm-10-top-apis.adoc[+Top 10 NetBeans APIs (Videos)+] explains the "top 10" NetBeans APIs.


* xref:../../tutorials/nbm-google.adoc[+NetBeans Plugin Quick Start+]
* xref:../../tutorials/nbm-quick-start.adoc[+NetBeans Platform Quick Start+]
* xref:../../tutorials/nbm-dukescript.adoc[+NetBeans Platform Plugins with DukeScript+]
* xref:../../tutorials/nbm-porting-basic.adoc[+Porting Swing Components+]
* xref:../../tutorials/nbm-javafx.adoc[+Porting JavaFX Components+]
* xref:../../tutorials/nbm-selection-1.adoc[+Part 1: Selection Management Tutorial+]
* xref:../../tutorials/nbm-selection-2.adoc[+Part 2: Selection Management Tutorial II—Using Nodes+]
* xref:../../tutorials/nbm-nodesapi2.adoc[+Part 3: Nodes API Tutorial+]
* xref:../../tutorials/nbm-property-editors.adoc[+Part 4: Property Editor API Tutorial+]


=== Extending the NetBeans Platform

The NetBeans module system is very extensible, meaning that you can add
features through different mechanisms: the Java's service provider interface, the
Lookup API (that also works with the service provider interface) and the
concept of "layers" (that works in a similar way to the Windows registry).

* For an introduction to the Java Service Provider mechanism see Oracle's link:https://www.oracle.com/technical-resources/articles/javase/extensible.html[+Creating Extensible Applications With the Java Platform+]
* For an introduction to the NetBeans Lookup API see link:http://netbeans.dzone.com/articles/netbeans-lookups-explained[+NetBeans Lookups Explained!+].
* You may also find link:http://netbeans.dzone.com/news/netbeans-extension-points[+How Do NetBeans Extension Points Work?+] of interest.
* The link:https://dzone.com/articles/how-create-pluggable-photo-alb[+How to Create a Pluggable Photo Album in Java+] 
* The link:https://bits.netbeans.org/dev/javadoc/layers.html[+Description of Layer Registrations in NetBeans APIs+] explains how each module
in NetBeans registers files, documents, classes and more in a global registry that you can query.

=== Using Maven to build applications

You can use Maven and the NetBeans Platform to build great applications. Here're some
tutorials to get you started:

* xref:../../wiki/MavenBestPractices.adoc[+Maven Best Practices in NetBeans IDE+]
* link:https://bits.netbeans.org/mavenutilities/nbm-maven-plugin/[+About the NetBeans Module Maven Plugin+]
* xref:../../tutorials/nbm-maven-commandline.adoc[+NetBeans Platform Maven Command Line Tutorial+]
* xref:../../tutorials/nbm-maven-quickstart.adoc[+NetBeans Platform Quick Start Using Maven+]
* xref:../../tutorials/nbm-maven-modulesingle.adoc[+NetBeans Platform File Type Tutorial Using Maven+]
* xref:../../tutorials/nbm-maven-modulesuite.adoc[+NetBeans Platform Selection Tutorial Using Maven+]
* xref:../../tutorials/nbm-maven-crud.adoc[+NetBeans Platform CRUD Tutorial Using Maven+]
* xref:../../blogs/geertjan/mavenized_netbeans_platform_runtime_container.adoc[Mavenized NetBeans Platform Runtime Container]
* link:https://dzone.com/articles/how-create-maven-nb-project-type[+How to Create a Custom Project Type in a Mavenized NetBeans Platform Application+]
* link:https://dzone.com/articles/nb-how-create-javahelp-mavenized[+How to Create JavaHelp in a Mavenized NetBeans Platform Application+]

=== Using OSGi modules with the NetBeans Platform

You can use OSGi modules within a NetBeans Platform. 

* http://wiki.apidesign.org/wiki/Netigso[OSGi and NetBeans]
* xref:../../tutorials/nbm-osgi-quickstart.adoc[+NetBeans Platform Quick Start Using OSGi+]
* xref:../../tutorials/nbm-emf.adoc[+NetBeans Platform EMF Integration Tutorial+]

=== Testing and diagnostics

When building applications on top of the NetBeans Platform you want, of course, to test things. Also to diagnose what's going on. These are of help:

* xref:../../tutorials/nbm-test.adoc[+NetBeans Platform Test Infrastructure Tutorial+]
* xref:../../tutorials/nbm-gesture.adoc[+NetBeans Platform Gesture Collection Infrastructure Tutorial+]

=== Sample applications.

* xref:../../tutorials/nbm-paintapp.adoc[+Paint Application Tutorial+]
* xref:../../tutorials/nbm-feedreader.adoc[+Feed Reader Tutorial+]
* xref:../../tutorials/nbm-htmleditor.adoc[+HTML Editor Tutorial+]
* xref:../../tutorials/nbm-povray-1.adoc[+POV-Ray Renderer Tutorial+]
* xref:../../tutorials/nbm-crud.adoc[+Create/Read/Update/Delete (CRUD)+]
* xref:../../tutorials/nbm-geospatial.adoc[+Geospatial+]
* xref:../../tutorials/nbm-workflow.adoc[+Workflow+]

* xref:../../tutorials/nbm-ide.adoc[+Development Environment+]

=== How to develop editors

Of course, the NetBeans Platform has many features to build top-noch editors (that's because
we build the NetBeans IDE on top of the platform :-)). Here's a list of tutorials
that you can use to build your own editors.

* xref:../../tutorials/nbm-filetype.adoc[+File Type Integration Tutorial+]
* xref:../../tutorials/nbm-javacc-lexer.adoc[+JavaCC Lexer Generator Integration Tutorial+]
* xref:../../tutorials/nbm-javacc-parser.adoc[+JavaCC Parser Generator Integration Tutorial+]
* xref:../../tutorials/nbm-copyfqn.adoc[+Java Language Infrastructure Tutorial+]
* xref:../../tutorials/nbm-code-generator.adoc[+Code Generator Integration Tutorial+]
* xref:../../tutorials/nbm-code-completion.adoc[+Code Completion Integration Tutorial+]
* xref:../../tutorials/nbm-mark-occurrences.adoc[+Mark Occurrences Module Tutorial+]
* xref:../../tutorials/nbm-palette-api1.adoc[+Code Snippet Tutorial+]
* xref:../../tutorials/nbm-palette-api2.adoc[+Editor Component Palette Module Tutorial+]
* xref:../../tutorials/nbm-xmleditor.adoc[+XML Editor Extension Module Tutorial+]
* xref:../../tutorials/nbm-hyperlink.adoc[+Hyperlink Navigation Tutorial+]
* xref:../../tutorials/nbm-java-hint.adoc[+Java Hints Tutorial+]
* xref:../../tutorials/nbm-code-template.adoc[+Code Templates Tutorial+]

=== NetBeans APIs for Visualizing Data

The NetBeans Platform has a powerful library (called the "NetBeans Visual Library") that you can use
to build complex user-interactive visualizations.

* xref:../../tutorials/nbm-visual_library.adoc[+Visual Library Tutorial+]
* xref:../../tutorials/nbm-quick-start-visual.adoc[+Visual Library Tutorial for Java Applications+]
* link:http://tdamir.blogspot.com/2007/12/ddl-visualizer-visualize-sql-script.html[+Visualize SQL Scripts with the NetBeans Platform+]
* xref:../../wiki/VisualDatabaseExplorer.adoc[+A Visual Database Explorer for NetBeans+]
* link:http://java.dzone.com/news/how-create-visual-applications[+How to Create Visual Applications in Java?+]
* link:http://java.dzone.com/news/how-add-resize-functionality-v[+How to Add Resize Functionality to Visual Applications in Java?+]
* xref:../../community/magazine/html/04/visuallibrary.adoc[+Creative Uses of the Visual Library+]

=== Building custom project types

Since we use the NetBeans Platform to build the NetBeans IDE, we use objects known as "Projects" to represent
Java, PHP or C/C++ "projects".

You can use "projects" to represent a set of files or concepts organized in a hierarchy. Be either the list of
rails in a train station, or a hierarchy of parts of a component you're designing.

These tutorials explain how to extend existing project types or to create your own.

* xref:../../tutorials/nbm-projectsamples.adoc[+Project Sample Module Tutorial+]
* xref:../../tutorials/nbm-projectextension.adoc[+Project Type Extension Module Tutorial+]
* xref:../../tutorials/nbm-projecttype.adoc[+Project Type Module Tutorial+]

=== Templates

We use "templates" to create files with some predefined content.

* xref:../../tutorials/nbm-filetemplates.adoc[+File Template Module Tutorial+]

=== Installers

* xref:../../tutorials/nbm-nbi.adoc[+Installer Integration Tutorial+]

=== Options window

* xref:../../tutorials/nbm-options.adoc[+Options Window Module Tutorial+]

=== Property editors

When you select an object in your application, the "Property Editor" window automatically shows
the properties of the object. Be it a plane, a train or a satellite.

* xref:../../tutorials/nbm-propertyeditors-integration.adoc[+Property Editor Integration Tutorial+]
* xref:../../tutorials/nbm-nodesapi.adoc[+System Properties Module Tutorial+]

=== Quick search, Ribbon bars, Wizards

The IDE has specific components that help you create quick search fields, ribbon bars and wizards.

* xref:../../tutorials/nbm-quick-search.adoc[+Quick Search Integration Tutorial+]
* xref:../../tutorials/nbm-ribbonbar.adoc[+Ribbon Bar Tutorial+]
* xref:../../tutorials/nbm-wizard.adoc[+Wizard Module Tutorial+]

=== Ant and Maven

These are tutorials on how to use Ant and Maven with the NetBeans Platform.

* xref:../../tutorials/nbm-ant.adoc[+Ant+]
* xref:../../tutorials/nbm-maven-commandline.adoc[+Maven+]

[[API]]
== API Reference

This is a list of most frequently used APIs in the NetBeans Platform.

* link:https://bits.netbeans.org/dev/javadoc/index.html[+NetBeans API Javadoc+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html[+Module System API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-windows/org/openide/windows/doc-files/api.html[+Window System API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-filesystems/org/openide/filesystems/doc-files/api.html[+Filesystems API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/doc-files/api.html[+Datasystems API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-nodes/org/openide/nodes/doc-files/api.html[+Nodes API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/doc-files/api.html[+Explorer API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-explorer/org/openide/explorer/doc-files/propertyViewCustomization.html[+Property Sheet Customization+]
* link:https://bits.netbeans.org/dev/javadoc/org-netbeans-api-visual/org/netbeans/api/visual/widget/doc-files/documentation.html[+Visual Library API+]
* link:https://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/doc-files/api.html[+Utilities API+]
* link:https://bits.netbeans.org/dev/javadoc/branding.html[+Branding+]
* link:https://bits.netbeans.org/dev/javadoc/layers.html[+Description of Layer Registrations in NetBeans APIs+]
* link:https://bits.netbeans.org/dev/javadoc/apichanges.html[+Latest NetBeans API Changes+]

