<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <!-- -*- xhtml -*- -->
        <title>Editor Component Palette Module Tutorial for the NetBeans Platform</title>
        <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/>
        <meta name="AUDIENCE" content="NBUSER"/>
        <meta name="TYPE" content="ARTICLE"/>
        <meta name="EXPIRES" content="N"/>
        <meta name="developer" content="gwielenga@netbeans.org"/>
        <meta name="indexed" content="y"/>
        <meta name="description"
              content="A short guide to using the Palette API to create a new palette."/>
        <!--     Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
    </head>
    <body>
        <h1>NetBeans Editor Component Palette Module Tutorial</h1>

        <p>This tutorial demonstrates how to create a component palette that provides drag-and-drop code snippets
            for a new file type. Code snippets serve to speed up coding. The IDE provides a component palette for JSP files,
            HTML files, and Form files. In this tutorial, you learn how to create a component palette for Java source files.</p>

        <p><strong class="notes">Note: </strong>This document uses NetBeans Platform 8.0
            and NetBeans IDE 8.0. If you
            are using an earlier version, see <a href="74/nbm-palette-api2.html">the previous version
                of this document</a>.</p>

        <p><b>Contents</b></p>

        <p><img src="../images/articles/80/netbeans-stamp.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 8.0" title="Content on this page applies to NetBeans IDE 8.0"/></p>

        <ul class="toc">
            <li><a href="#intro">Introduction to Component Palettes</a></li>

            <li><a href="#creatingthemoduleproject">Setting Up the Module Project</a></li>

            <li><a href="#coding-module">Creating the Component Palette and Code Snippets</a>
                <ul>
                    <li><a href="#deps">Specifying the Module's Dependencies</a></li>
                    <li><a href="#creating-palettes">Integrating with the Component Palette</a></li>
                    <li><a href="#creating-snippets">Creating the Code Snippets</a></li>
                </ul></li>
            <li><a href="#building">Building and Installing the Module</a></li>

        </ul>


        <p><b>To follow this tutorial, you need the software and resources listed in the following 
                table.</b></p>

        <table>
            <tbody>
                <tr>
                    <th class="tblheader" scope="col">Software or Resource</th>
                    <th class="tblheader" scope="col">Version Required</th>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
                    <td class="tbltd1">version 8.0 or above</td>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
                    <td class="tbltd1">version 7 or above</td>
                </tr>
            </tbody>
        </table>

        <p class="tips">For troubleshooting purposes, you are welcome to download the <a href="http://java.net/projects/nb-api-samples/sources/api-samples/show/versions/8.0/tutorials/palette">completed tutorial source code</a>.</p>

        <h2 class="tutorial"><a name="intro"></a>Introduction to Component Palettes</h2>

        <p>In this tutorial, you implement several classes provided by the
            <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/overview-summary.html">NetBeans Palette API</a>.
            Then you register the new component palette in the <tt>layer.xml</tt> file, for the <tt>text/x-java</tt>
            MIME type. The palette that you create in this way will only be visible if a Java source file
            is open.</p>

        <p class="tips">If you do not want to create a new component palette, but only want to add a code snippet to an existing component palette,
            see the <a href="nbm-palette-api1.html">NetBeans Code Snippet Module Tutorial</a>.</p>

        <!--
        <div class="indent">
          <h3 class="tutorial"><a name="installing-sample"></a>Getting to Know the Sample</h3>
        <p>Take the following steps to install the sample:</p>
        <ol><li><a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=2761">Download the completed sample</a> 
         from the Plugin Portal and install it in the IDE.</li>
            <li>In the New Project wizard, you will find the sample here:
        <p><img src="../images/tutorials/componentpalette/65-new-proj-dialog.png" alt="New Project dialog"/></p></li>
            <li>Complete the wizard and your project source structure will be as follows:
        <p><img src="../images/tutorials/componentpalette/65-new-proj-wiz.png" alt="Projects window initially"/></p></li>
        <li>Right-click the project node and choose Run. A new instance of the IDE opens and the module is installed.</li>
         <li>Verify that the module is correctly installed by opening a Java source file. You
          should now see your new Java source file palette, containing one item:
        <p><img src="../images/tutorials/componentpalette/65-open-java-file.png" alt="" alt="Open Java source file"/></p></li>
        <li>Drag the item into the Java source file and, when you drop the item, you will see the related customizer:
        <p><img src="../images/tutorials/componentpalette/65-customizer-in-java-file.png" alt="Customizer"/></p></li>
         <li>When you complete the customizer, you will have a new main method, together with the
          comment you typed in the customizer:
        <p><img src="../images/tutorials/componentpalette/65-dropped-main-method.png" alt="" alt="Dropped main method"/></p></li>
        </ol>
        <p>Now that you know what the end result looks like, you will create the module from scratch and learn about each part
         while creating it.</p>
          </div>
        -->
        <!-- ===================================================================================== -->

        <h2 class="tutorial"><a name="creatingthemoduleproject"></a>Setting up the Module Project</h2>
        <p>Before you start writing the module, you have to make sure you
            that your project is set up correctly. The IDE provides a wizard that sets up all the basic files
            needed for a module.</p>

        <div class="indent">


            <ol>
                <li>Choose File &gt; New Project (Ctrl+Shift+N). Under Categories, select NetBeans Modules.
                    Under Projects, select Module. Click Next.</li>
                <li>In the Name and Location panel, type <tt>JavaSourceFilePalette</tt> in the Project Name field.
                    Change the Project Location to any directory on your computer. Click Next.</li>
                <li>In the Basic Module Configuration panel, type <tt>org.netbeans.modules.javasourcefilepalette</tt>
                    in Code Name Base. Click Finish.</li>
            </ol>

        </div>

        <p> The IDE creates the <tt>JavaSourceFilePalette</tt>
            project. The project contains all of your sources and
            project metadata, such as the project's Ant build script. The project
            opens in the IDE. You can view its logical structure in the Projects window (Ctrl-1) and its
            file structure in the Files window (Ctrl-2).</p>

        <!-- ===================================================================================== -->
        <h2><a name="coding-module"></a>Creating the Component Palette and Code Snippets</h2>

        <div class="indent">

            <h3 class="tutorial"><a name="deps"></a>Specifying the Module's Dependencies</h3>

            <p>You will need to subclass several classes that belong to <a href="http://bits.netbeans.org/dev/javadoc/index.html">NetBeans APIs</a>.
                Each has to be declared as a module dependency. 
                Use the Project Properties dialog box for this 
                purpose, as described below.</p>

            <div class="indent">

                <ol>
                    <li>In the Projects window, right-click the <tt>JavaSourceFilePalette</tt> project node and choose Properties.
                        In the Project Properties dialog box, click Libraries.</li>

                    <li><p>For each of the following APIs, click "Add...",
                            select the name from the Module list, and then click OK to confirm it:</p>
                        <p></p>
                        <ul>
                            <li>Common Palette</li>
                            <li>Dialogs API</li>
                            <li>Lookup API</li>
                            <li>MIME Lookup API</li>
                            <li>Nodes API</li>
                            <li>Text API</li>
                            <li>UI Utilities API</li>
                            <li>Utilities API</li>
                        </ul>
                    </li>
                    <li>Click OK to exit the Project Properties dialog box.</li>
                    <li>In the Projects window, expand the Important Files node, double-click the Project Metadata node, and note the
                        long list of APIs that you selected have been
                        declared as module dependencies.</li>

                </ol>

            </div>

            <h3 class="tutorial"><a name="creating-palettes"></a>Integrating with the Component Palette</h3>

            <p>Component Palettes are defined 
                by the <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/overview-summary.html">NetBeans Component Palette API</a>.
                The NetBeans Component Palette API consists of the following APIs:</p>

            <table width="76%" border="1">

                <tbody><tr>
                        <td>
                            <b>File</b>
                        </td>
                        <td>
                            <b>Description</b>
                        </td>
                    </tr>
                    <tr>
                        <td align="left" valign="top"><tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteFactory.html">PaletteFactory</a></tt></td>
                        <td>Creates a new instance of the Component Palette. To do so, it invokes
                            the <tt>createPalette</tt> method which creates a new palette from
                            a node or layer folder.</td>
                    </tr>
                    <tr>
                        <td align="left" valign="top"><tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteController.html">PaletteController</a></tt></td>
                        <td>Provides access to data in the Component Palette.</td>
                    </tr>
                    <tr>
                        <td align="left" valign="top"><tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteActions.html">PaletteActions</a></tt></td>

                        <td>Provides the actions on the palette, categories, and items in the palette.


                        </td>

                    </tr>
                    <tr>
                        <td align="left" valign="top"><tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteFilter.html">PaletteFilter</a></tt></td>

                        <td>Controls whether a category or item is displayed in the palette.


                        </td>

                    </tr>

                </tbody>
            </table>

            <br/><br/>

            <p>To use the Palette API to create the palette in this tutorial, take the following steps:</p>

            <div class="indent">

                <ol>

                    <li>Right-click the <tt>JavaSourceFilePalette</tt> project node and
                        choose New &gt; Java Class. Create a Java file called <tt>JavaSourceFileLayerPaletteFactory</tt>.</li>

                    <li>Replace the default content of the <tt>JavaSourceFileLayerPaletteFactory.java</tt> file with the following:

                        <pre class="examplecode">package org.netbeans.modules.javasourcefilepalette;

import java.io.IOException;
import javax.swing.Action;
import <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-editor-mimelookup/org/netbeans/api/editor/mimelookup/MimeRegistration.html">org.netbeans.api.editor.mimelookup.MimeRegistration</a>;
import <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/DragAndDropHandler.html">org.netbeans.spi.palette.DragAndDropHandler</a>;
import <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteActions.html">org.netbeans.spi.palette.PaletteActions</a>;
import <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteController.html">org.netbeans.spi.palette.PaletteController</a>;
import <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteFactory.html">org.netbeans.spi.palette.PaletteFactory</a>;
import org.openide.util.Exceptions;
import org.openide.util.Lookup;
import org.openide.util.datatransfer.ExTransferable;

public class JavaSourceFileLayerPaletteFactory {

    private static PaletteController palette = null;

    <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-editor-mimelookup/org/netbeans/api/editor/mimelookup/MimeRegistration.html">@MimeRegistration</a>(mimeType = "text/x-java", service = PaletteController.class)
    public static <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteController.html">PaletteController</a> createPalette() {
        try {
            if (null == palette) {
                return <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteFactory.html">PaletteFactory</a>.createPalette(
                <b>//Folder:</b>      
                "JavaPalette", 
                <b>//Palette Actions:</b>
                new <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteActions.html">PaletteActions</a>() {
                    @Override public Action[] getImportActions() {return null;}
                    @Override public Action[] getCustomPaletteActions() {return null;}
                    @Override public Action[] getCustomCategoryActions(Lookup lkp) {return null;}
                    @Override public Action[] getCustomItemActions(Lookup lkp) {return null;}
                    @Override public Action getPreferredAction(Lookup lkp) {return null;}
                }, 
                <b>//Palette Filter:</b>  
                null, 
                <b>//Drag and Drop Handler:</b>  
                new <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/DragAndDropHandler.html">DragAndDropHandler</a>(true) {
                    @Override public void customize(ExTransferable et, Lookup lkp) {}
                });
            }
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
        return null;
    }

}</pre></li>

                </ol>

            </div>

            <h3 class="tutorial"><a name="creating-snippets"></a>Creating the Code Snippets</h3>

            <p>Each code snippet requires the following files:</p>

            <ul>
                <li>A Java class that defines the piece of code to be dragged into the Source Editor.</li>
                <li>Optionally, a customizer where the user can specify something that will be added to
                    the snippet, such as comments.</li>
                <li>A properties file that defines the labels and tooltips.</li>
                <li>A 16x16 pixel image for the 'Small Icon' display.</li>
                <li>A 32x32 pixel image for the 'Big Icon' display.</li></ul>

            <p>After you have created or added the above files to the NetBeans module, you declare them in a resource declaration XML file,
                which you register in the NetBeans 
                System Filesystem by using the <tt>layer.xml</tt>
                file, as follows:</p>

            <pre class="examplecode">&lt;folder name="JavaPalette"&gt;
    &lt;folder name="Items"&gt;
        &lt;attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javasourcefilepalette.Bundle"/&gt;
        &lt;file name="Item.xml" url="resources/Item.xml"&gt;
            &lt;attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javasourcefilepalette.Bundle"/&gt;
        &lt;/file&gt;
    &lt;/folder&gt;
&lt;/folder&gt;</pre>

            <p>The above can be generated automatically for you if you use the <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-palette/org/netbeans/spi/palette/PaletteItemRegistration.html">@PaletteItemRegistration</a> annotation,
                 as shown below, in a <tt>package-info.java</tt> class:</p>

            <pre>@PaletteItemRegistration(
         paletteid = "JavaPalette", 
         category = "Items", 
         itemid = "Comment", 
         icon32 = "org/netbeans/modules/javasourcefilepalette/BR32.png", 
         icon16 = "org/netbeans/modules/javasourcefilepalette/BR16.png", 
         body = "// new comment", 
         name = "New Comment", 
         tooltip = "// new comment")
package org.netbeans.modules.javasourcefilepalette;

import org.netbeans.spi.palette.PaletteItemRegistration;</pre>

            <p class="tips">For all the details on the information referred to in this
                subsection, work through the
                <a href="nbm-palette-api1.html">NetBeans Code Snippet Module Tutorial</a>.</p>

        </div>

        <!-- ======================================================================================= -->

        <h2><a name="building"></a>Building and Installing the Module</h2>
        <p>The IDE uses an Ant build script to build and install your module. The build script is created for you
            when you create the module project.</p>

        <div class="indent">

            <ol>
                <li><p>In the Projects window, right-click the <tt>JavaSourceFilePalette</tt> project 
                        and choose Run.</p></li>
                <li>The IDE opens. Open a Java file. The palette opens at the same time. Drag
                    snippets into the palette, a dialog opens, set a display name and other info,
                    and you'll see your snippet in the palette:<br/><br/>
                    <p><img src="../images/tutorials/palette_api/java-snippets-javafx.png"/></p>
                </li>
            </ol>

        </div>


        <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Component%20Palette%20Module%208.0%20Tutorial">Send Us Your Feedback</a></div>
        <!-- ======================================================================================== -->

        <h2><a name="nextsteps"></a>Next Steps</h2>

        <p>For more information about creating and developing NetBeans modules, see the following resources: </p>
        <ul>
            <li><a href="https://netbeans.org/kb/trails/platform.html">Other Related Tutorials</a></li>
            <li><a href="http://bits.netbeans.org/dev/javadoc/index.html">NetBeans API Javadoc</a></li>
        </ul>

        <!-- ======================================================================================== 
        
        <h2><a name="version"></a>Versioning </h2>
          
        <table width="76%" border="1">
         <tbody>
           <tr>
              <td>
                <div align="left"><b>Version</b></div>
              </td>
              <td>
                <div align="left"><b>Date</b></div>
              </td>
              <td>
                <div align="left"><b>Changes</b></div>
        </td>
        <td>
                <div align="left"><b>Open Issues</b></div>
              </td>
          </tr>
          <tr>
              <td>
                 1
              </td>
              <td>
                      29 November 2005
              </td>
              <td>
                 Initial version
         </td>
        <td>
                <ul>
                        <li>Needs to be reviewed! Use at your own risk!
                        <li>Need to add explanation for adding own dialog box for predefining values.
                        <li>Explanatory text for the use of the NetBeans APIs to be added.
                        <li>Check for copy-paste errors.
                        <li>Need to add more Javadoc links, for NetBeans API classes in the code.
                        
                        
                </ul>
              </td>
          </tr>
        
         <tr>
              <td>
                 2
              </td>
              <td>
                      30 November 2005
              </td>
              <td>
                      <li>Changed the ZIP file because of problems (see <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=69571">Issue 69571</a>).
                      <li>Removed hyphens and changed screenshots.
         </td>
        <td>
                All other issues from above must still be done.
              </td>
          </tr>
        <tr>
              <td>
                 3
              </td>
              <td>
                      8 December 2005
              </td>
              <td>
                      <li>Fixed reopened issue <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=69571">Issue 69571</a>
        <td>
                All other issues from above must still be done.
              </td>
          </tr>
          <tr>
              <td>
                 4
              </td>
              <td>
                      22 August 2006
              </td>
              <td>
                      <li>Minor tweaks.
        <td>
                All other issues from above must still be done.
                <br>Discovered that the editor support file is missing in the tutorial,
                 but not in the module that you can download from the top of the file.
                <br>Discovered that there are several gaps and tbds in this tutorial.
              </td>
          </tr>
           <tr>
              <td>
                 5
              </td>
              <td>
                      30 May 2007
              </td>
              <td>
                Began updating this tutorial for 6.0.      
              </td>
              <td>
                  ...
              </td>
          </tr>
           <tr>
              <td>
                 6
              </td>
              <td>
                      5 November 2008
              </td>
              <td>
                Began & completed updating this tutorial for 6.5.
            <p>Main changes:
            <ul>
                <li>New sample download link to Plugin Portal.
                <li>Rewritten code to use <tt>layer.xml</tt> registration.
                <li>Instead of JBoss palette and snippets for JBoss XML file,
                created a palette for Java source files, which is now
                possible because editor and palette do not need to be
                in the same module. Therefore sections like
                'Recognizing the New File Type' are not necessary (except
                if the palette is for a new file type, in which case
                the File Type Module tutorial should first be used).
                <li>Omitted the code for creating the palette item, because
                it is already described in the Code Snippet Module Tutorial.
            </ul>
              </td>
              <td>
                      3 August 2009
              </td>
              <td>
        Fixed broken element tags so that formatting is now correct.
              </td>
              <td>
                      19 November 2011
              </td>
              <td>
        Began updating for 7.1.
              </td>
              <td>
                      9 July 2012
              </td>
              <td>
        Began updating for 7.2.
              </td>
              <td>
                      3 July 2014
              </td>
              <td>
        Began updating for 8.0.
              </td>
          </tr>
          </tbody>
        </table>-->
    </body>
</html>
