<!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>
    <title>使用 Maven 创建 NetBeans 平台 CRUD 应用程序</title>
    <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="AUDIENCE" content="NBUSER"/>
    <meta name="TYPE" content="ARTICLE"/>
    <meta name="EXPIRES" content="N"/>
    <meta name="indexed" content="y"/>
    <meta name="description"
          content="This tutorial demonstrates how to use the the Maven build framework to create a simple
    NetBeans Platform application that can read and write to a database."/>
   <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
        <!--     Use is subject to license terms.-->
</head>
<body>

   <h1>使用 Maven 创建 NetBeans 平台 CRUD 应用程序</h1>

   <p>欢迎使用 <a href="https://platform.netbeans.org/"><b>NetBeans 平台</b></a>！</p>

    <p>本文档演示了如何使用 Maven 生成框架创建能读写数据库的简单 NetBeans 平台应用程序。在本文档中，您将使用 Maven 原型创建 NetBeans 平台应用程序和模块，并使用 Swing UI 工具包和 &quot;Matisse&quot; GUI 生成器创建窗口组件。
    </p>

   <p>本文档根据基于 Ant 的<a href="nbm-crud_zh_CN.html">针对 NetBeans 平台的 NetBeans CRUD 应用程序教程</a>而编写，阐述了使用 Ant 和 Maven 开发 NetBeans 平台应用程序的一些不同之处。在了解 Maven 与 Ant 之间的不同之处后，您便可以轻松地继续学习 <a href="https://netbeans.org/kb/trails/platform_zh_CN.html">NetBeans 平台学习资源</a>上的其他教程。
   </p>

   <p class="tips">“CRUD 样例应用程序”是“新建项目”向导中提供的一个 Maven 样例。</p>

 <p class="tips">如果您不熟悉 NetBeans 平台，则可能需要观看截屏视频系列<a href="https://platform.netbeans.org/tutorials/nbm-10-top-apis.html">最主要的 10 个 NetBeans API</a>。</p>

   <p><b>目录</b></p>
   <p><img src="../images/articles/74/netbeans_stamp_74_73_72.png" class="stamp" width="114" height="114" alt="本页上的内容适用于 NetBeans IDE 6.5、6.7、6.8" title="本页上的内容适用于 NetBeans IDE 6.5、6.7、6.8" /></p>
      <ul class="toc">
        <li><a href="#config">配置 Maven</a></li>
        <li><a href="#01">创建 NetBeans 平台应用程序项目</a>
            <ul>
            <li><a href="#01b">创建模块</a></li>
            <li><a href="#01c">为模块建立依赖关系</a></li>
            <li><a href="#01d">标记应用程序</a></li>
            </ul>
        </li>
        <li><a href="#02">创建实体类</a>
            <ul>
            <li><a href="#02a">将 DerbyClient 添加为运行时依赖关系</a></li>
            <li><a href="#02b">通过数据库生成实体类</a></li>
            </ul>
        </li>
        <li><a href="#03">读取：读取并显示记录</a>
            <ul>
            <li><a href="#03b">将树视图添加到窗口中</a></li>
            <li><a href="#03c">创建工厂类</a></li>
            <li><a href="#03d">修改依赖关系</a></li>
            </ul>
        </li>
        <li><a href="#04">更新：编辑记录</a>
            <ul>
            <li><a href="#04b">使用 LookupListener</a></li>
            <li><a href="#04c">添加“撤消”和“恢复”功能</a></li>
            <li><a href="#04d">添加“保存”功能</a></li>
            <li><a href="#04e">保留更改</a></li>
            <li><a href="#04f">添加“刷新”功能</a></li>
            </ul>
        </li>
        <li><a href="#05">创建：添加新记录</a>
            <ul>
            <li><a href="#05b">创建并保存新对象</a></li>
            </ul>
        </li>
        <li><a href="#06">运行应用程序</a></li>
      </ul>
         
<p><b>要学习本教程，您需要具备下表中列出的软件和资源。</b></p>

    <table>
        <tbody>
            <tr>
                <th class="tblheader" scope="col">软件或资源</th>
                <th class="tblheader" scope="col">要求的版本</th>
            </tr> 
            <tr>
                <td class="tbltd1"><a href="http://download.netbeans.org/netbeans/6.9/beta/">NetBeans IDE</a></td>
                <td class="tbltd1">版本 6.9 (Java)</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">版本 6</td>
            </tr>
            <tr>
                <td class="tbltd1"><a href="http://maven.apache.org/">Maven</a></td>
                <td class="tbltd1">版本 2.0.9 或更高</td>
            </tr>
            <tr>
                <td class="tbltd1">JavaDB 或其他数据库服务器和数据库</td>
                <td class="tbltd1">&nbsp;</td>
            </tr>
        </tbody>
    </table>
 
    <p><strong class="notes">注意：</strong></p>
    <ul>
        <li>捆绑的 GlassFish Server Open Source Edition 3.0.1 附带 JavaDB 数据库服务器和一个样例数据库。</li>
        <li>为开发适用于 NetBeans 平台的应用程序，您无需下载该平台的独立版本。通常，您是在 NetBeans IDE 中开发应用程序和模块，并且只包含运行 NetBeans 平台和您的应用程序所需的模块。</li>
</ul>
    <p>在开始本教程之前，您可以先阅读下面这些文档。</p>
    <ul>
        <li><a href="http://wiki.netbeans.org/MavenBestPractices">Best Practices for Apache Maven in NetBeans 6.x</a>（NetBeans 6.x 中 Apache Maven 的最佳做法）</li>
        <li><a href="http://www.sonatype.com/books/maven-book/reference/introduction.html">Chapter 1. Introducing Apache Maven</a>（第 1 章. Apache Maven 简介，来自 <a href="http://www.sonatype.com/books/maven-book/reference/public-book.html">Maven: The Definitive Guide</a>（Maven：权威指南））</li>
        <li><a href="https://netbeans.org/kb/docs/java/gui-functionality_zh_CN.html">生成 GUI 应用程序简介</a></li>
    </ul>
    
 
<!-- =================================================================== -->
<!-- +++++++++++++++ Configuring Maven +++++++++++++++++++++++++++++++++ -->

<h2><a name="config"></a>配置 Maven</h2>
    <p>如果这是您首次创建 Maven 项目，则需要在“选项”窗口中检查 Maven 配置设置。要学完本教程，您的本地系统中必须安装有 Maven。可以从 <a href="http://maven.apache.org/">Maven 站点</a>下载安装程序。</p>

    <ol>
        <li>在“选项”窗口中选择“其他”类别，然后单击 &quot;Maven&quot; 标签。</li>
        <li>指定 Maven 在本地的安装位置（要求为 2.0.9 或更高版本）。</li>
        <li>检查本地 Maven 资源库的位置是否正确。</li>
        <li>单击“确定”。</li>
    </ol>
    <p>在大多数情况下，如果您执行了典型的 Maven 配置，则“选项”窗口中的信息应该已经是正确的。</p>

    <p>IDE 使用 Maven SCM 签出 Maven 工件。您可能希望检查本地计算机上是否安装了签出源文件所需的任何客户端，并对它们进行了正确配置。</p>
    <p class="tips">有关 Maven SCM 的详细信息，请参见 <a href="http://maven.apache.org/scm/index.html">Maven SCM 页</a>。</p>

    <div class="indent">
        <h3><a name="config1"></a>查看 Maven 资源库</h3>
        <p>Maven 用于生成所有项目的工件均存储在本地 Maven 资源库中。如果某一工件被声明为项目依赖关系，则会将其从已注册的某个远程资源库下载到您的本地资源库中。</p>

        <p>缺省情况下，已注册 NetBeans 资源库和一些常见的索引 Maven 资源库，并将它们列在资源库浏览器窗口中。NetBeans 资源库包含生成项目所需的大多数公共工件。您可以使用“Maven 资源库”浏览器查看本地和远程资源库的内容。您可以展开“本地库”节点以查看本地存在的工件。NetBeans 资源库节点下列出的工件可以添加为项目依赖关系，但并非所有这些工件都在本地存在。仅当这些工件被声明为项目依赖关系时，才会将其添加到“本地库”。</p>

        <p>打开“Maven 资源库”浏览器：</p>
        <ul>
            <li>从主菜单中选择“窗口”&gt;“其他”&gt;“Maven 资源库浏览器”。<br/>
            <img src="../images/tutorials/maven-quickstart68/maven-nbm-netbeans-repo.png" alt="“Maven 资源库”浏览器的屏幕快照" title="“Maven 资源库”浏览器的屏幕快照" class="margin-around b-all"  />
            </li>
        </ul>


        <p>当将光标置于某个工件上时，IDE 将显示包含其坐标的工具提示。在浏览器中双击工件的 JAR 文件，可以查看有关该工件的其他详细信息。</p>

        <p class="tips">单击“Maven 资源库”浏览器工具栏上的“查找”按钮，或使用主工具栏中的“快速搜索”文本字段，可以搜索工件。</p>
        <p class="tips">有关管理 Maven 类路径依赖关系和在 IDE 中使用 Maven 资源库的详细信息，请参见 <a href="http://wiki.netbeans.org/MavenBestPractices">Best Practices for Apache Maven in NetBeans 6.x</a>（NetBeans 6.x 中 Apache Maven 的最佳做法）的<a href="http://wiki.netbeans.org/MavenBestPractices#Dependency_management">Dependency Management</a>（依赖关系管理）部分。
        </p>
        <p class="tips">要观看使用工件查看器的演示，请参见<a href="https://netbeans.org/kb/docs/java/maven-dependencies-screencast.html">处理 Maven 依赖关系</a>截屏视频。</p>

</div>

<!-- =================================================================== -->
<!-- +++++++++++++++ Creating the Platform Application +++++++++++++++++ -->

<h2><a name="01"></a>创建 NetBeans 平台应用程序项目</h2>

    <p>在此部分，您将使用“新建项目”向导来通过 Maven 原型创建 NetBeans 平台应用程序。该向导会创建您开发 NetBeans 平台应用程序所需的 Maven 模块项目。您还将使用“新建项目”向导创建 NetBeans 模块。
    </p>

    <div class="indent">
        <h3><a name="01a"></a>创建项目</h3>

        <p>请执行下列步骤，以使用“新建项目”向导创建 NetBeans 平台应用程序。
        </p>
        <ol>
            <li>选择“文件”&gt;“新建项目”(Ctrl-Shift-N) 以打开“新建项目”向导。</li>
            <li>从 &quot;Maven&quot; 类别中选择“Maven NetBeans 应用程序”。单击“下一步”。</li>
            <li>在“项目名称”中键入 <strong>MavenPlatformCRUDApp</strong> 并设置“项目位置”。单击“完成”。</li>
        </ol>

        <p class="notes"><strong>注意：</strong>当创建平台应用程序时，可以在向导中单击“下一步”并创建模块项目；但在本教程中，出于演示目的，您将分别创建应用程序和模块。</p>

        <img src="../images/tutorials/maven-crud/mavencrud-new-project.png" alt="“新建项目”向导的屏幕快照" title="“新建项目”向导的屏幕快照" class="margin-around b-all"  />
        
        <p>单击“完成”后，缺省情况下 IDE 会创建以下 Maven 项目类型。</p>
        <ul>
            <li><strong>NetBeans 平台应用程序。</strong>此项目是平台应用程序的容器项目，它列出了要包含的模块和项目资源库的位置。此项目不包含任何源文件。IDE 在此项目的子目录中生成包含源文件和资源的模块。</li>
            <li><strong>基于 NetBeans 平台的应用程序。</strong>此项目指定编译应用程序所需的工件（源文件）。在此项目的 <tt>pom.xml</tt> 文件中，指定了必需的依赖关系（IDE 工件和模块工件）。</li>
            <li><strong>平台应用程序标记资源。</strong>此项目包含用于标记应用程序的资源。 </li>
        </ul>
        <img src="../images/tutorials/maven-crud/mavencrud-projects-window1.png" alt="“项目”窗口中项目结构的屏幕快照" title="“项目”窗口中的项目结构" class="margin-around b-all"  />

        <p class="notes"><strong>注意：</strong></p>
        <ul>
            <li>如果这是您第一次使用 Maven 创建 NetBeans 平台应用程序，则创建项目可能会耗费一些时间，因为 IDE 需要从 NetBeans 资源库中下载所有必需的工件。</li>
            <li>在创建项目时，您会看到某些项目（例如，基于 NetBeans 平台的应用程序项目）带有标记，这是因为在 <tt>pom.xml</tt> 文件 (POM) 中声明的一些依赖关系不可用。</li>
        </ul>



        <h3><a name="01b"></a>创建模块</h3>
        <p>在本练习中，您将使用“新建项目”向导创建一个 NetBeans 模块。
        </p>

        <ol>
            <li>选择“文件”&gt;“新建项目”(Ctrl-Shift-N) 以打开“新建项目”向导。</li>
            <li>从 &quot;Maven&quot; 类别中选择“Maven NetBeans 模块”。单击“下一步”。</li>
            <li>在“项目名称”中键入 <strong>MavenPlatformCRUDApp-dbaccess</strong>。</li>
            <li>指定“项目位置”，方法是单击“浏览”并找到 <strong>MavenPlatformCRUDApp</strong> 目录。单击“打开”。<br/>
            <img src="../images/tutorials/maven-crud/mavencrud-select-location.png" alt="显示位置的选择位置对话框的屏幕快照" title="显示项目目录的“选择项目位置”对话框" class="margin-around b-all"  />
            </li>
            <li>单击“完成”。 </li>
        </ol>

        <p>单击“完成”后，向导会创建名为 <strong>MavenPlatformCRUDApp-dbaccess</strong> 的 NetBeans 模块项目。当您将模块保存在某个子目录中时，该模块会自动配置为包含在应用程序中。如果打开该项目的 POM，则会看到 MavenPlatformCRUDApp 被声明为父项目。
        </p>
        <pre class="examplecode">&lt;parent&gt;
    &lt;artifactId&gt;MavenPlatformCRUDApp&lt;/artifactId&gt;
    &lt;groupId&gt;com.mycompany&lt;/groupId&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;/parent&gt;
&lt;artifactId&gt;MavenPlatformCRUDApp-dbaccess&lt;/artifactId&gt;
&lt;packaging&gt;nbm&lt;/packaging&gt;
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
&lt;name&gt;MavenPlatformCRUDApp - dbaccess NetBeans Module&lt;/name&gt;
</pre>

        <p class="tips">可以更改模块的显示名称，方法是编辑 POM 中的 <tt>&lt;name&gt;</tt> 元素，或者在该项目的属性窗口中修改名称。缺省显示名称为项目的工件 Id <tt>MavenPlatformCRUDApp-dbaccess</tt>。</p>

        <p>如果在“项目”窗口中的“项目文件”节点下查看 NetBeans 平台应用程序的 POM，则可以看到在应用程序的模块中列出了三个模块。</p>
<pre class="examplecode">
&lt;modules&gt;
   &lt;module&gt;branding&lt;/module&gt;
   &lt;module&gt;application&lt;/module&gt;
   &lt;module&gt;MavenPlatformCRUDApp-dbaccess&lt;/module&gt;
&lt;/modules&gt;
</pre>
        

        <h3><a name="01c"></a>为模块建立依赖关系</h3>
        <p>现在，您需要将该模块添加为基于 NetBeans 平台的应用程序的依赖关系。可以通过在编辑器中编辑 <tt>pom.xml</tt> 或使用“添加依赖关系”对话框来添加依赖关系。</p>
        <ol>
            <li>在“项目”窗口中展开<strong>基于 NetBeans 平台的应用程序</strong>节点。</li>
            <li>右键单击“库”节点，然后选择“添加依赖关系”。</li>
            <li>单击“打开的项目”标签，然后选择 &quot;MavenPlatformCRUDApp - dbaccess&quot;<strong></strong>。单击“确定”。<br/>
            <img src="../images/tutorials/maven-crud/mavencrud-add-dependency1.png" alt="“添加依赖关系”对话框的屏幕快照" title="“添加依赖关系”对话框中的“打开的项目”标签" class="margin-around b-all"  />
            </li>
        </ol>


        <p>如果在“项目”窗口中展开基于 NetBeans 平台的应用程序的“库”节点，则可以看到 MavenPlatformCRUDApp-dbaccess 此时已被列为依赖关系。</p>

        <p>如果查看基于 NetBeans 平台的应用程序的 POM，则可以看到模块工件 <tt>MavenPlatformCRUDApp-dbaccess</tt> 已被列为编译应用程序所需的依赖关系。在生成模块项目并在本地资源库中安装了工件之后，便可使用该工件。</p>

    <pre class="examplecode">&lt;dependency&gt;
    &lt;groupId&gt;${project.groupId}&lt;/groupId&gt;
    &lt;artifactId&gt;<strong>MavenPlatformCRUDApp-dbaccess</strong>&lt;/artifactId&gt;
    &lt;version&gt;${project.version}&lt;/version&gt;
&lt;/dependency&gt;</pre>



        <h3><a name="01d"></a>标记应用程序</h3>
        <p>标记模块用于指定在生成平台应用程序时所使用的标记资源。您可以使用“标记”对话框轻松地指定应用程序名称、闪屏和应用程序图标，并修改文本元素的值。</p>

        <p>在本练习中，您将替换缺省的闪屏图像。缺省情况下，IDE 生成的标记模块会包含一个当平台应用程序启动时所显示的图像。可以通过执行下列步骤，将此图像替换为其他图像。</p>
        <ol>
            <li>右键单击“项目”窗口中的<strong>平台应用程序标记资源</strong>模块，然后选择“标记”。</li>
            <li>在“闪屏”标签中，指定要用作闪屏的图像，方法是单击缺省闪屏图像旁边的“浏览”按钮，然后找到您希望使用的图像。单击“确定”。</li>
        </ol>

        <p>例如，您可以将下面的图像复制到本地系统，然后在“标记”对话框中指定该图像。</p>
        <img src="../images/tutorials/maven-crud/splash-crud.gif" alt="缺省闪屏图像的示例" title="缺省闪屏图像的示例" class="margin-around b-all"  />

        <p>当启动应用程序时，便会在启动过程中显示新图像。</p>
    </div>


<!-- =================================================================== -->
<!-- +++++++++++++++++++++++ Creating the Entity Classes +++++++++++++++++++ -->


    <h2><a name="02"></a>创建实体类</h2>

    <p>在此部分，将通过 Java DB 数据库中的表来生成一些实体类。要在应用程序中创建实体类并使用 Java 持久性 API (Java Persistence API, JPA)，您需要具有数据库服务器和 JPA 持久性提供器库的访问权限。本教程使用 JavaDB 数据库服务器，但您也可以将应用程序配置为使用其他数据库服务器。</p>

    <p>使资源可用的最简便方法是注册 IDE 捆绑的 GlassFish Server Open Source Edition 3.0.1 实例。该 GlassFish 服务器附带 Java DB 数据库服务器、一个样例数据库和 JPA 持久性提供器。在创建实体类之前，请通过执行下列步骤启动 Java DB。</p>

    <ol>
        <li>在“服务”窗口中，展开“服务器”节点，然后检查是否已注册 GlassFish 实例。</li>
        <li>展开“数据库”节点，右键单击 Java DB 上 <strong>app</strong> 数据库的数据库连接节点 (<tt>jdbc:derby://localhost:1527/sample [app on APP]</tt>)，然后选择“连接”。 </li>
    </ol>

    <p>当您选择“连接”时，如果尚未启动数据库，则 IDE 会启动它。</p>
    <div class="indent">
        <h3><a name="02a"></a>将 DerbyClient 添加为运行时依赖关系</h3>

        <p>在此部分，您会将 derbyclient-10.5.3.0_1 库添加为依赖关系。</p>

        <ol>
            <li>右键单击 <strong>dbaccess</strong> 模块的“库”节点，然后选择“添加依赖关系”。</li>
            <li>添加库，方法是在 &quot;GroupId&quot; 中键入 <strong>org.apache.derby</strong>，在 &quot;ArtifactId&quot; 中键入 <strong>derbyclient</strong>，在“版本”中键入 <strong>10.5.3.0_1</strong>。</li>
            <li>从“作用域”下拉列表中选择 &quot;runtime&quot;<strong></strong>。单击“确定”。<br/>
            <img src="../images/tutorials/maven-crud/mavencrud-add-dependency-derby.png" alt="“添加依赖关系”对话框的示例" title="在“添加依赖关系”对话框中添加 derbyclient JAR" class="margin-around b-all"  />
            </li>
        </ol>

        <p>如果在“项目”窗口中展开“运行时库”节点，则可以看到 <tt>derbyclient</tt> 库已被列为依赖关系。</p>
        <p class="tips">您还可以在编辑器中修改 POM，以指定依赖关系的 <tt>&lt;scope&gt;</tt> 元素值。</p>

        <pre class="examplecode">&lt;dependency&gt;
            &lt;groupId&gt;org.apache.derby&lt;/groupId&gt;
            &lt;artifactId&gt;derbyclient&lt;/artifactId&gt;
            &lt;version&gt;10.5.3.0_1&lt;/version&gt;
            &lt;scope&gt;runtime&lt;/scope&gt;
        &lt;/dependency&gt;</pre>

        <h3><a name="02b"></a>通过数据库生成实体类</h3>
        <p>在此部分，您将使用向导在 <strong>dbaccess</strong> 模块中生成实体类。
        </p>

        <ol>
            <li>右键单击 <strong>dbaccess</strong> 模块的“源包”，然后选择“新建”&gt;“其他”。</li>
            <li>在“持久性”类别中选择“通过数据库生成实体类”。单击“下一步”。</li>
            <li>从“数据库连接”下拉列表中选择 Java DB 样例数据库。</li>
            <li>从“可用表”列表中选择 &quot;CUSTOMER&quot; 表，然后单击“添加”。单击“添加”后，相关表 DISCOUNT_CODE 也会被添加到“选定表”列表中。单击“下一步”。</li>
            <li>键入 <strong>com.mycompany.mavenplatformcrudapp.dbaccess</strong> 作为包名。确保“创建持久性单元”和“为持久性字段生成已命名的查询标注”处于选中状态。单击“完成”。</li>
        </ol>
        <p>单击“完成”后，IDE 会生成 Customer 和 DiscountCode 实体类。IDE 还会在“其他源”节点下 &quot;src/main/resources&quot;<tt></tt> 目录的 &quot;META-INF&quot;<tt></tt> 包中生成 <tt>persistence.xml</tt> 文件。</p>


        


        


    </div>

<!-- =================================================================== -->
<!-- +++++++++++++++++++ Implementing CRUD : READ ++++++++++++++++++++++ -->


    <h2><a name="03"></a>读取：读取并显示记录</h2>
    <p>在此部分，您将使用向导在 <strong>dbaccess</strong> 模块中添加窗口组件。您将在窗口组件中启用树视图来将对象显示为节点。您可以在节点的属性窗口中查看每条记录的数据。</p>
    
    <div class="indent">

        <h3><a name="03a"></a>添加窗口组件</h3>
        <p>在本练习中，您将创建窗口组件。</p>
        <ol>
            <li>在“项目”窗口中右键单击项目节点，然后选择“新建”&gt;“窗口”。</li>
            <li>在“窗口位置”下拉列表中选择 &quot;editor&quot;<strong></strong>，然后选择“在应用程序启动时打开”<strong></strong>。单击“下一步”。<br/>
            <img src="../images/tutorials/maven-crud/mavencrud-new-window-customer.png" alt="“新建窗口”向导的屏幕快照" title="“新建窗口”向导的“基本设置”页" class="margin-around b-all"  />
            </li>
            <li>在“类名前缀”中键入 <strong>Customer</strong>。</li>
            <li>在“包”中键入 <strong>com.mycompany.mavenplatformcrudapp.viewer</strong>。单击“完成”。
            <p>向导会显示将创建和修改的文件列表。</p></li>
        </ol>
        <p>单击“完成”后，您可以在“项目”窗口中看到 IDE 在“源包”下的 &quot;com.mycompany.mavenplatformcrudapp.viewer&quot;<tt></tt> 中生成了 <tt>CustomerTopComponent.java</tt> 类。可以在“文件”窗口中查看项目的结构。要编译 Maven 项目，“源包”（“文件”窗口中的 <tt>src/main/java</tt> 目录）下只能放置源文件。资源文件（例如，XML 文件）需要置于“其他源”（“文件”窗口中的 <tt>src/main/resources</tt> 目录）下面。</p>


        <h3><a name="03b"></a>添加树视图</h3>

        <p>现在，您将修改窗口组件以在树视图中显示数据库记录。您将在构造函数中添加实体管理器，并启用 Bean 树视图。</p>
        <ol>
            <li>单击 <tt>CustomerTopComponent.java</tt> 的“源”标签以在编辑器中查看源代码。</li>
            <li>修改构造函数以添加下列内容。
        <pre class="examplecode">public CustomerTopComponent() {
    initComponents();
    setName(NbBundle.getMessage(CustomerTopComponent.class, &quot;CTL_CustomerTopComponent&quot;));
    setToolTipText(NbBundle.getMessage(CustomerTopComponent.class, &quot;HINT_CustomerTopComponent&quot;));
//        setIcon(ImageUtilities.loadImage(ICON_PATH, true));

    <strong>EntityManager entityManager = Persistence.createEntityManagerFactory(&quot;com.mycompany_MavenPlatformCRUDApp-dbaccess_nbm_1.0-SNAPSHOTPU&quot;).createEntityManager();
    Query query = entityManager.createQuery(&quot;SELECT c FROM Customer c&quot;);
    List&lt;Customer&gt; resultList = query.getResultList();</strong>
}</pre>
            
            <p class="tips">检查代码中持久性单元的名称是否正确，方法是将其与 <tt>persistence.xml</tt> 中指定的名称进行比较。</p>
            </li>
            <li>修改类签名以实现 <tt>ExplorerManager.Provider</tt>。
            <pre class="examplecode">public final class CustomerTopComponent extends TopComponent <strong>implements ExplorerManager.Provider</strong></pre>
            </li>
            <li>修复导入以导入 <tt><strong>javax.persistence.Query</strong></tt> 和 <tt><strong>javax.util.List</strong></tt>。</li>
            <li>声明并初始化 ExplorerManager：
            <pre class="examplecode">private static ExplorerManager em = new ExplorerManager();</pre>
            </li>
            <li>实现抽象方法，然后修改 <tt>getExplorerManager</tt> 方法以返回 <tt>em</tt>。
            <pre class="examplecode">@Override
public ExplorerManager getExplorerManager() {
    return em;
}</pre>
            <p class="tips">您可以将插入光标置于类签名中，然后按 Alt+Enter 组合键来实现抽象方法。</p>
            </li>
            <li>将以下内容添加到构造函数中以启用树视图。
            <pre class="examplecode">BeanTreeView beanTreeView = new BeanTreeView();
add(beanTreeView, BorderLayout.CENTER);</pre>
            </li>
            
            <li>在“设计”视图，右键单击组件，然后选择“设置布局”&gt;“边框式布局”。保存所做的更改。</li>

       </ol>

        <h3><a name="03c"></a>创建工厂类</h3>

        <p>现在，您将在 <tt>com.mycompany.mavenplatformcrudapp.viewer</tt> 包中创建一个新类 <strong>CustomerChildFactory</strong>，该类用于为数据库中的每位客户创建一个新 BeanNode。</p>
        <ol>

            <li>右键单击 &quot;com.mycompany.mavenplatformcrudapp.viewer&quot;<tt><strong></strong></tt> 包，然后选择“新建”&gt;“Java 类”。</li>
            <li>在“类名”中键入 <strong>CustomerChildFactory</strong>。单击“完成”。</li>
            <li>修改签名以扩展 <tt>ChildFactory&lt;Customer&gt;</tt>。</li>
            <li>为表格中的项目列表声明字段 <tt>resultList</tt>，然后添加 <tt>CustomerChildFactory</tt> 方法。
                <pre class="examplecode">private List&lt;Customer&gt; resultList;

public CustomerChildFactory(List&lt;Customer&gt; resultList) {
    this.resultList = resultList;
}</pre>
            </li>
            <li>实现后，修改 <tt>createKeys</tt> 抽象方法。
                <pre class="examplecode">@Override
    protected boolean createKeys(List&lt;Customer&gt; list) {
      for (Customer customer : resultList) {
          list.add(customer);
      }
      return true;
    }</pre></li>
            <li>添加一个方法以创建节点。
                <pre class="examplecode">@Override
protected Node createNodeForKey(Customer c) {
    try {
        return new BeanNode(c);
    } catch (IntrospectionException ex) {
        Exceptions.printStackTrace(ex);
        return null;
    }
}</pre>
            </li>
            <li>修复导入以导入 <tt>org.openide.nodes.Node</tt> 和 <tt>java.beans.InstrospectionException</tt>。保存所做的更改。</li>
        </ol>


        <p>该类将如下所示：</p>

        <pre class="examplecode">package com.mycompany.mavenplatformcrudapp.viewer;

import com.mycompany.mavenplatformcrudapp.dbaccess.Customer;
import java.beans.IntrospectionException;
import java.util.List;
import org.openide.nodes.BeanNode;
import org.openide.nodes.ChildFactory;
import org.openide.nodes.Node;
import org.openide.util.Exceptions;

public class CustomerChildFactory extends ChildFactory&lt;Customer&gt; {

    private List&lt;Customer&gt; resultList;

    public CustomerChildFactory(List&lt;Customer&gt; resultList) {
        this.resultList = resultList;
    }

    @Override
    protected boolean createKeys(List&lt;Customer&gt; list) {
        for (Customer customer : resultList) {
            list.add(customer);
        }
        return true;
    }

    @Override
    protected Node createNodeForKey(Customer c) {
        try {
            return new BeanNode(c);
        } catch (IntrospectionException ex) {
            Exceptions.printStackTrace(ex);
            return null;
        }
    }

}</pre>

        <p>现在，您需要修改 <strong>CustomerTopComponent</strong> 以使用 ExplorerManager 来将 JPA 查询的结果列表传递到节点。</p>
        <ol>
            <li>将以下行添加到 CustomerTopComponent 构造函数中，以设置节点的根上下文，并将 TopComponent 的 ActionMap 和 ExplorerManager 添加到 TopComponent 的 Lookup 中。

            <pre class="examplecode">
    EntityManager entityManager =  Persistence.createEntityManagerFactory(&quot;com.mycompany_MavenPlatformCRUDApp-dbaccess_nbm_1.0-SNAPSHOTPU&quot;).createEntityManager();
    Query query = entityManager.createQuery(&quot;SELECT c FROM Customer c&quot;);
    List&lt;Customer&gt; resultList = query.getResultList();
    <strong>em.setRootContext(new AbstractNode(Children.create(new CustomerChildFactory(resultList), true)));
    associateLookup(ExplorerUtils.createLookup(em, getActionMap()));</strong></pre>
 <!--           <li>Expand the Libraries node and change the dependency on <tt>org-openide-nodes</tt> and <tt>org-openide-explorer</tt> from transitive to direct.-->

            <p>这会同步每个选定节点的属性窗口和工具提示文本。</p>
            </li>
            <li>修复导入并保存更改。</li>
        </ol>



        <h3><a name="03d"></a>运行应用程序</h3>
        <p>在本练习中，您将测试应用程序以确认该应用程序可以正确访问和读取数据库表。在生成和运行应用程序之前，需要首先修改 POM，因为该应用程序需要对 <tt>org-openide-nodes</tt> 和 <tt>org-openide-explorer</tt> JAR 的直接依赖关系。您可以在“项目”窗口中修改此依赖关系。</p>

        <ol>
            <li>展开 <strong>dbaccess</strong> 模块的“库”节点。</li>
            <li>右键单击 <tt>org-openide-nodes</tt> JAR，然后选择“声明为直接依赖关系”。</li>
            <li>右键单击 <tt>org-openide-explorer</tt> JAR，然后选择“声明为直接依赖关系”。</li>
            <li>右键单击 &quot;MavenPlatformCRUDApp - NetBeans Platform based application&quot;<strong></strong>，然后选择“使用依赖关系生成”。
            <p>“输出”窗口会显示将要包含的模块。</p>
            <img src="../images/tutorials/maven-crud/mavencrud-build-output1.png" alt="“输出”窗口的屏幕快照 - 上半部分" title="显示生成顺序的“输出”窗口" class="margin-around b-all"  />
            <p>“输出”窗口还会显示生成状态。</p>
            <img src="../images/tutorials/maven-crud/mavencrud-build-output2.png" alt="“输出”窗口的屏幕快照 - 下半部分" title="显示生成成功的“输出”窗口" class="margin-around b-all"  />
            </li>
            <li>右键单击该应用程序，然后选择“运行”。</li>
        </ol>
        <p>应用程序启动后，将显示 Customer 窗口，数据库表中的每条记录在该窗口中都有一个对应的节点。</p>
            
        <img src="../images/tutorials/maven-crud/mavencrud-customer-window1.png" alt="应用程序中 Customer 窗口的屏幕快照" title="应用程序中的 Customer 窗口" class="margin-around b-all"  />
        <p>可以右键单击 Customer 窗口树中的某个节点，然后选择“属性”以查看有关该项目的其他详细信息。</p>


        <img src="../images/tutorials/maven-crud/mavencrud-read-properties.png" alt="应用程序中“属性”窗口的屏幕快照" title="显示选定节点详细信息的“属性”窗口" class="margin-around b-all"  />

    </div>



<!-- =================================================================== -->
<!-- +++++++++++++++++++ Implementing CRUD : UPDATE ++++++++++++++++++++ -->

    <h2><a name="04"></a>更新：编辑记录</h2>
    

    <p>在此部分，您将添加一个用于编辑记录详细信息的窗口组件。</p>
    <div class="indent">
    <h3><a name="04a"></a>创建编辑器窗口</h3>
    <p>在本练习中，您将创建一个新窗口 MyEditor，该窗口包含两个文本字段，用于编辑选定节点的名称和城市字段。然后，您将修改 <tt>layer.xml</tt> 文件，以便 Customer 窗口以浏览器模式打开，而不是以编辑器模式打开。</p>
    <ol>
        <li>右键单击 <strong>dbaccess</strong> 模块，然后选择“新建”&gt;“窗口”。</li>
        <li>在下拉列表中选择 &quot;editor&quot;<strong></strong>，然后选择“在应用程序启动时打开”<strong></strong>。单击“下一步”。</li>
        <li>在“类名前缀”中键入 <strong>MyEditor</strong>。</li>
        <li>在“包”中键入 <strong>com.mycompany.mavenplatformcrudapp.editor</strong>。单击“完成”。</li>
        <li>在 <tt>MyEditorTopComponent</tt> 的“设计”视图中添加两个 JLabel 和两个 JTextField。 </li>
        <li>将标签的文本分别设置为 &quot;Name&quot; 和 &quot;City&quot;，并将两个 JTextField 的变量名称分别设置为 <tt><strong></strong>jTextField1</tt> 和 <tt><strong>jTextField2</strong></tt>。保存所做的更改。<br/>
        <img src="../images/tutorials/maven-crud/mavencrud-myeditor-window.png" alt="“设计”视图中窗口组件的屏幕快照" title="“设计”视图中的窗口组件" class="margin-around b-all"  />
        </li>
        <li>在“项目”窗口中展开“重要文件”节点，然后双击“XML 层”<strong></strong>以在编辑器中打开 <tt>layer.xml</tt> 文件。</li>
        <li>修改 <tt>layer.xml</tt> 以指定将以浏览器模式显示 CustomerTopComponent 窗口。保存所做的更改。
            <pre class="examplecode">
&lt;folder name=&quot;Modes&quot;&gt;
    &lt;folder name=&quot;editor&quot;&gt;
        &lt;file name=&quot;MyEditorTopComponent.wstcref&quot; url=&quot;MyEditorTopComponentWstcref.xml&quot;/&gt;
    &lt;/folder&gt;
    <strong>&lt;folder name=&quot;explorer&quot;&gt;
        &lt;file name=&quot;CustomerTopComponent.wstcref&quot; url=&quot;CustomerTopComponentWstcref.xml&quot;/&gt;
    &lt;/folder&gt;</strong>
&lt;/folder&gt;
            </pre>
        </li>
    </ol>


    <p>现在，可以测试应用程序以检查窗口是否可以打开并且其位置是否正确。</p>
    <p class="tips">请务必在执行“使用依赖关系生成”操作之前清理应用程序。</p>

    <p>现在，可以开始添加代码，以便在 Customer 窗口中选择某个节点时，该对象的名称和城市字段会显示在编辑器中。</p>


    <h3><a name="04b"></a>使用 LookupListener</h3>
    <p>在本练习中，您将修改 Customer 窗口，以便在选定了某个节点时，新的 <tt>Customer</tt> 对象会被添加到节点的 Lookup 中。然后，您将修改 MyEditor，以便窗口实现 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/LookupListener.html">LookupListener</a></tt> 以侦听被添加到 Lookup 中的 <tt>Customer</tt> 对象。</p>

    <ol>
        <li>修改 <strong>CustomerChildFactory</strong> 中的 <tt>createNodeForKey</tt> 方法以创建 <tt>AbstractNode</tt> 而不是 <tt>BeanNode</tt>。
            <!--Do this by creating an AbstractNode, instead of a BeanNode, in the CustomerChildFactory class.
            That enables you to add the current Customer object to the Lookup of the Node, as follows (note the part in bold):-->
            <pre class="examplecode">
@Override
protected Node createNodeForKey(Customer c) {
  <strong>Node node = new AbstractNode(Children.LEAF, Lookups.singleton(c));
  node.setDisplayName(c.getName());
  node.setShortDescription(c.getCity());
  return node;</strong>
//        try {
//            return new BeanNode(c);
//        } catch (IntrospectionException ex) {
//            Exceptions.printStackTrace(ex);
//            return null;
//        }
}</pre>
        <p>当在 Customer 窗口中选择某个新节点时，所选的 <tt>Customer</tt> 对象会被添加到窗口的 Lookup 中。</p>
        </li>
        <!--    First, set a dependency in the editor module on the module that provides the entity class,
                as well as the module that provides the persistence JARs.
-->
        <li>单击 <strong>MyEditorTopComponent</strong> 的“源”标签，然后修改类签名以实现 <tt>LookupListener</tt>。
            <pre class="examplecode">public final class MyEditorTopComponent extends TopComponent <strong>implements LookupListener</strong></pre>
        </li>
        <li>添加用于存储结果的变量。
            <pre class="examplecode">private Lookup.Result result = null;</pre>
        </li>
        <li>实现所需的抽象方法以添加 <tt>resultChanged</tt> 方法。</li>
        <li>修改 <tt>resultChanged</tt> 方法，以便每次将新的 <tt>Customer</tt> 对象引入 Lookup 时都会更新 jTextField。
            <pre class="examplecode">
      @Override
      public void resultChanged(LookupEvent le) {
          Lookup.Result r = (Lookup.Result) le.getSource();
          Collection&lt;Customer&gt; coll = r.allInstances();
          if (!coll.isEmpty()) {
              for (Customer cust : coll) {
                  jTextField1.setText(cust.getName());
                  jTextField2.setText(cust.getCity());
              }
          } else {
              jTextField1.setText(&quot;[no name]&quot;);
              jTextField2.setText(&quot;[no city]&quot;);
          }
      }
</pre>
        

        <p>在定义 LookupListener 之后，便可以将其添加到从全局上下文获得的 <tt>Lookup.Result</tt> 中。全局上下文将代理选定 Node 的上下文。例如，如果在树分层结构中选择 &quot;Ford Motor Co&quot;，则 &quot;Ford Motor Co&quot; 的 <tt>Customer</tt> 对象会被添加到节点的 Lookup 中。由于 &quot;Ford Motor Co&quot; 是当前选定的节点，因此其 <tt>Customer</tt> 对象此时在全局上下文中可用。随后即会将此对象传递到 <tt>resultChanged</tt>，以填充该文本字段。</p>
        </li>
        <li>修改 <tt>componentOpened</tt> 和 <tt>componentClosed</tt> 方法以便当编辑器窗口打开时激活 LookupListener。
            <pre class="examplecode">
      @Override
      public void componentOpened() {
          result = WindowManager.getDefault().findTopComponent(&quot;CustomerTopComponent&quot;).getLookup().lookupResult(Customer.class);
          result.addLookupListener(this);
          resultChanged(new LookupEvent(result));
      }

      @Override
      public void componentClosed() {
          result.removeLookupListener(this);
          result = null;
      }</pre>
    <p>由于编辑器窗口被设置为在应用程序启动时打开，因此当应用程序启动时，LookupListener 也将可用。</p>
    
    <p>在此示例中，您将使用 Customer 窗口提供的本地 Lookup。在这种情况下，将通过字符串 &quot;<tt>CustomerTopComponent</tt>&quot; 明确标识该窗口。在 <tt>CustomerTopComponent</tt> 的源代码中，该字符串被指定为 CustomerTopComponent 的 ID。仅当 MyEditorTopComponent 可以找到 ID 为 &quot;CustomerTopComponent&quot; 的 TopComponent 时，此方法才有效。
    </p>

    <p class="tips"><a href="http://weblogs.java.net/blog/timboudreau/archive/2007/01/how_to_replace.html">Tim Boudreau 的博客文章</a>中描述了一种更加灵活的方法，该方法需要重写选择模型。</p>
        </li>
    </ol>

    <p>在执行“清理”和“使用依赖关系生成”之后，便可以重新运行此应用程序。现在，当您在 Customer 窗口中选择某个新节点时，编辑器窗口即会更新。由于您现在使用的是 <tt>AbstractNode</tt> 而不是 <tt>BeanNode</tt>，因此节点的“属性”窗口中不显示任何属性。</p>




    <h3><a name="04c"></a>添加“撤消”和“恢复”</h3>
    <p>在本练习中，将通过实现 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/UndoRedo.html">UndoRedo</a></tt> 管理器来启用“撤消”和“恢复”功能。当用户在编辑器窗口中更改了某个字段时，工具栏上的“撤消”和“恢复”按钮以及“撤消”和“恢复”菜单项便会启用。</p>

    <ol>
        <li>在 MyEditorTopComponent 的顶部声明并实例化一个新的 UndoRedoManager。
            <pre class="examplecode">private UndoRedo.Manager manager = new UndoRedo.Manager();</pre>
        </li>
        <li>在 MyEditorTopComponent 中创建 <tt>getUndoRedo()</tt> 方法：
        <pre class="examplecode">
@Override
public UndoRedo getUndoRedo() {
    return manager;
}</pre>
        </li>
        <li>将以下内容添加到构造函数中。
            <!--In the constructor of MyEditorTopComponent, add a KeyListener to the jTextFields and,
within the related methods that you need to implement, add the UndoRedoListeners:
            
            what is happening here?
            
            
            -->
<pre class="examplecode">
jTextField1.getDocument().addUndoableEditListener(manager);
jTextField2.getDocument().addUndoableEditListener(manager);</pre>
        </li>
    </ol>
    <p>您可以运行该应用程序以测试“撤消”和“恢复”功能的按钮和菜单项是否能够正常使用。</p>


    <h3><a name="04d"></a>添加“保存”功能</h3>

    <p>在本练习中，您将集成 NetBeans 平台的“保存”功能。您将修改 <tt>layer.xml</tt> 文件以隐藏工具栏中的“全部保存”按钮，并添加“保存”按钮。然后，将添加用于检测文本字段更改的侦听程序，以及在检测到更改时所触发的 <tt>fire</tt> 方法。
    
    </p>
    <ol>
        <li>打开并修改 <strong>dbaccess</strong> 模块的 <tt>layer.xml</tt> 文件以添加一个 Toolbar 元素。
            <pre class="examplecode">
    <strong>&lt;folder name=&quot;Toolbars&quot;&gt;
      &lt;folder name=&quot;File&quot;&gt;
          &lt;file name=&quot;org-openide-actions-SaveAction.shadow&quot;&gt;
              &lt;attr name=&quot;originalFile&quot; stringvalue=&quot;Actions/System/org-openide-actions-SaveAction.instance&quot;/&gt;
              &lt;attr name=&quot;position&quot; intvalue=&quot;444&quot;/&gt;
          &lt;/file&gt;
          &lt;file name=&quot;org-openide-actions-SaveAllAction.shadow_hidden&quot;/&gt;
      &lt;/folder&gt;
    &lt;/folder&gt;</strong>
&lt;/filesystem&gt;</pre>
        </li>
        <li>在 <strong>MyEditorTopComponent</strong> 构造函数中添加以下调用，以便在检测到文本字段更改时触发某个方法。
            <pre class="examplecode">
public MyEditorTopComponent() {

          ...
    jTextField1.getDocument().addUndoableEditListener(manager);
    jTextField2.getDocument().addUndoableEditListener(manager);

    <strong>jTextField1.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent arg0) {
          fire(true);
        }
        public void removeUpdate(DocumentEvent arg0) {
          fire(true);
        }
        public void changedUpdate(DocumentEvent arg0) {
          fire(true);
        }
    });

    jTextField2.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent arg0) {
          fire(true);
        }
        public void removeUpdate(DocumentEvent arg0) {
          fire(true);
        }
        public void changedUpdate(DocumentEvent arg0) {
          fire(true);
        }
    });

    //Create a new instance of our SaveCookie implementation:
    impl = new SaveCookieImpl();

    //Create a new instance of our dynamic object:
    content = new InstanceContent();

    //Add the dynamic object to the TopComponent Lookup:
    associateLookup(new AbstractLookup(content));</strong>

    ...
}</pre>
            </li>
            <li>添加 <tt>fire</tt> 方法，在检测到更改时，即会调用该方法。
                
            <pre class="examplecode">
public void fire(boolean modified) {
  if (modified) {
      //If the text is modified,
      //we add SaveCookie impl to Lookup:
      content.add(impl);
  } else {
      //Otherwise, we remove the SaveCookie impl from the lookup:
      content.remove(impl);
  }
}</pre>
            </li>
            <li>添加 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-nodes/org/openide/cookies/SaveCookie.html">SaveCookie</a></tt>（由 <tt>fire</tt> 方法添加到 <tt>InstanceContent</tt> 中）的以下实现。
<pre class="examplecode">
private class SaveCookieImpl implements SaveCookie {

  @Override
  public void save() throws IOException {

     Confirmation message = new NotifyDescriptor.Confirmation(&quot;Do you want to save \&quot;&quot;
              + jTextField1.getText() + &quot; (&quot; + jTextField2.getText() + &quot;)\&quot;?&quot;,
              NotifyDescriptor.OK_CANCEL_OPTION,
              NotifyDescriptor.QUESTION_MESSAGE);

      Object result = DialogDisplayer.getDefault().notify(message);
      //When user clicks &quot;Yes&quot;, indicating they really want to save,
      //we need to disable the Save action,
      //so that it will only be usable when the next change is made
      //to the JTextArea:
      if (NotifyDescriptor.YES_OPTION.equals(result)) {
          fire(false);
          //Implement your save functionality here.
      }
  }
}</pre>
            </li>
            <li>将以下字段添加到 MyEditorTopComponent 中。
            <pre class="examplecode">
private final SaveCookieImpl impl;
private final InstanceContent content;
</pre>
            </li>
            <li>修复导入并保存更改。</li>
            <li>右键单击“项目”窗口中“库”节点下的 <tt>org-openide-dialogs</tt> JAR，然后选择“声明为直接依赖关系”。</li>
        </ol>
        <p>现在，您可以对该应用程序执行“清理”、“使用依赖关系生成”和“运行”操作，以确认当您修改某个文本字段时，便会启用“保存”按钮。</p>


        <h3><a name="04e"></a>保留更改</h3>

        <p>在下一个练习中，您将添加用于保留更改的代码。此时，应用程序可正确识别某个字段何时发生了更改，并启用更改保存选项。当单击“保存”时，随即出现一个对话框，提示您确认是否希望保存更改。然而，当在对话框中单击“确定”时，这些更改并没有保留。要保留更改，您需要添加一些 JPA 代码以处理到数据库的持久性。</p>

        <ol>
            <li>将以下字段添加到 <strong>MyEditorTopComponent</strong> 中。
                <pre class="examplecode">private Customer customer;</pre>
            </li>
            <li>添加用于保留更改的 JPA 代码，方法是修改 <tt>save</tt> 方法以将注释 <tt>&quot;//Implement your save functionality here.&quot; </tt> 替换为以下代码。
            <pre class="examplecode">@Override
public void save() throws IOException {
...
    if (NotifyDescriptor.YES_OPTION.equals(result)) {
        fire(false);
        <strong>EntityManager entityManager = Persistence.createEntityManagerFactory(&quot;com.mycompany_MavenPlatformCRUDApp-dbaccess_nbm_1.0-SNAPSHOTPU&quot;).createEntityManager();
        entityManager.getTransaction().begin();
        Customer c = entityManager.find(Customer.class, customer.getCustomerId());
        c.setName(jTextField1.getText());
        c.setCity(jTextField2.getText());
        entityManager.getTransaction().commit();</strong>
    }
}</pre>
            <p class="tips">检查持久性单元的名称是否正确。</p>
            <p>当前未定义 <tt>customer.getCustomerId()</tt> 中的 &quot;customer&quot;。在下一步中，您会将 <tt>customer</tt> 设置为用于获取客户 ID 的当前 <tt>Customer</tt> 对象。</p>
            </li>
            <li>将下面以粗体显示的代码行添加到 <tt>resultChanged</tt> 方法中。
            <pre class="examplecode">
@Override
public void resultChanged(LookupEvent le) {
    Lookup.Result r = (Lookup.Result) le.getSource();
    Collection&lt;Customer&gt; coll = r.allInstances();
    if (!coll.isEmpty()) {
      for (Customer cust : coll) {
          <strong>customer = cust;</strong>
          jTextField1.setText(cust.getName());
          jTextField2.setText(cust.getCity());
      }
    } else {
      jTextField1.setText(&quot;[no name]&quot;);
      jTextField2.setText(&quot;[no city]&quot;);
    }
}</pre>
            </li>
            <li>修复导入并保存更改。</li>
        </ol>
        <p>您可以运行此应用程序并更改一些数据，以测试保存功能是否能够正常使用并可保留更改。此时，编辑器不会更新字段以反映更改后的数据。要检查是否保留了数据，需要重新启动应用程序。</p>
        
        <p>在下一个练习中，您将添加“刷新”功能，该功能可以从数据库中重新装入数据，并使您能够在编辑器中查看更改。</p>

        

        <h3><a name="04f"></a>添加“刷新”功能</h3>
        <p>在本练习中，通过将“刷新”菜单项添加到 Customer 窗口的根节点来添加用于更新客户查看器的功能。</p>

        <ol>
            <li>右键单击 <tt><strong>com.mycompany.mavenplatformcrudapp.viewer</strong></tt> 包，选择“新建”&gt;“Java 类”，然后创建一个名为 <strong>CustomerRootNode</strong> 的类。</li>
            <li>修改此类以扩展 <tt>AbstractNode</tt> 并添加以下方法。
            <pre class="examplecode">
public class CustomerRootNode extends AbstractNode {

    <strong>public CustomerRootNode(Children kids) {
      super(kids);
      setDisplayName(&quot;Root&quot;);
    }

    @Override
    public Action[] getActions(boolean context) {
      Action[] result = new Action[]{
          new RefreshAction()};
      return result;
    }

    private final class RefreshAction extends AbstractAction {

      public RefreshAction() {
          putValue(Action.NAME, &quot;Refresh&quot;);
      }

      public void actionPerformed(ActionEvent e) {
          CustomerTopComponent.refreshNode();
      }
    }</strong>

}</pre>
            <p class="tips">请注意，“刷新”操作绑定到新的根节点。</p>
            </li>
            <li>修复导入以导入 <strong><tt>javax.swing.Action</tt></strong>。保存所做的更改。</li>
            <li>修改 <strong>CustomerTopComponent</strong> 以添加下面用于刷新视图的方法：
            <pre class="examplecode">
public static void refreshNode() {
    EntityManager entityManager = Persistence.createEntityManagerFactory(&quot;com.mycompany_MavenPlatformCRUDApp-dbaccess_nbm_1.0-SNAPSHOTPU&quot;).createEntityManager();
    Query query = entityManager.createQuery(&quot;SELECT c FROM Customer c&quot;);
    List&lt;Customer&gt; resultList = query.getResultList();
    em.setRootContext(new <strong>CustomerRootNode</strong>(Children.create(new CustomerChildFactory(resultList), true)));
}</pre>
                <p>请注意，该方法使用 <strong>CustomerRootNode</strong> 来设置根上下文。</p>
                <p class="tips">如果希望 IDE 为您生成方法框架，则可以在 <tt>CustomerRootNode</tt> 类中包含 <tt>refreshNode</tt> 的代码行内按 Alt+Enter 组合键。</p>
            </li>
            <li>修改 CustomerTopComponent 构造函数中的代码，将调用 <strong>AbstractNode</strong> 替换为调用 <strong>CustomerRootNode</strong>。
            <p>对 <tt>CustomerRootNode</tt> 的调用会自动调用 <tt>refreshNode</tt> 方法和“刷新”。</p>
            </li>

            <li>修复导入并保存更改。</li>
        </ol>
                
        <p>如果运行此应用程序，您会看到有一个新的根节点，并且其弹出式菜单中提供了“刷新”操作。</p>


        <p class="tips">通过从 <tt>save</tt> 方法中调用 <tt>refreshNode</tt> 方法，可以重用 <tt>refreshNode</tt> 方法并实现自动刷新。或者，也可以创建一个包含刷新操作的独立模块，并使该模块可以在各模块之间共享。</p>
</div>



<!-- =================================================================== -->
<!-- +++++++++++++++++++ Implementing CRUD : CREATE ++++++++++++++++++++ -->

    <h2><a name="05"></a>创建：添加新记录</h2>

    <p>在此部分，将允许用户在数据库中创建一个新的条目。</p>
    <div class="indent">
        <h3><a name="05a"></a>添加“创建”操作</h3>
        <ol>
            <li>右键单击 <strong>dbaccess</strong> 模块，然后选择“新建”&gt;“操作”。</li>
            <li>选择“始终启用”。单击“下一步”。</li>
            <li>在“类别”下拉列表中，选择“文件”<strong></strong>。</li>
            <li>选择“全局工具栏按钮”。单击“下一步”。<br/>
            <img src="../images/tutorials/maven-crud/mavencrud-new-action.png" alt="“新建操作”向导的屏幕快照" title="“新建操作”向导中的“GUI 注册”" class="margin-around b-all"  />

            </li>
            <li>在“类名”中键入 <strong>NewAction</strong>。</li>
            <li>在“显示名称”中键入 <strong>My New Action</strong>。</li>
            <li>单击“浏览”，然后选择一个将在工具栏中使用的图像。
                <p>可以将以下图像 <tt>abc16.png</tt> 复制到您的桌面，然后在向导中指定该图像。(&nbsp;<img src="../images/tutorials/maven-crud/abc16.png" alt="样例 16 x 16 图标" title="样例 16 x 16 图标"  />&nbsp;)
            </p>
            </li>
            <li>选择 <strong>com.mycompany.mavenplatformcrudapp.editor</strong> 包。单击“完成”。</li>
            <li>修改 <tt>NewAction</tt> 类以打开 MyEditorTopComponent 并清除字段。
            <pre class="examplecode">
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public final class NewAction implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        MyEditorTopComponent tc = MyEditorTopComponent.getDefault();
        tc.resetFields();
        tc.open();
        tc.requestActive();
    }

}</pre>

            <p>此操作将实现 ActionListener 类，此类通过层文件中的条目绑定到应用程序，并由“新建操作”向导在此处生成。</p>
            </li>
        </ol>

<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- I am still hitting issue 186876 in the RC2 build   -->
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++ -->

        <h3><a name="05b"></a>创建并保存新对象</h3>
        <ol>
            <li>在 <strong>MyEditorTopComponent</strong> 中，添加以下方法以重置 JTextField 并创建新的 <tt>Customer</tt> 对象。
            <pre class="examplecode">
public void resetFields() {
    customer = new Customer();
    jTextField1.setText(&quot;&quot;);
    jTextField2.setText(&quot;&quot;);
}</pre>
                <p class="tips">如果希望 IDE 在 MyEditorTopComponent 中生成方法框架，则可以在 <tt>NewAction</tt> 类中的 <tt>resetFields</tt> 调用内按 Alt+Enter 组合键。</p>
            </li>
            <li>在 SaveCookie 中，确保返回的 null 表示已保存新条目，而非更新了现有条目：
            <pre class="examplecode">
public void save() throws IOException {

    Confirmation message = new NotifyDescriptor.Confirmation(&quot;Do you want to save \&quot;&quot;
                  + jTextField1.getText() + &quot; (&quot; + jTextField2.getText() + &quot;)\&quot;?&quot;,
                  NotifyDescriptor.OK_CANCEL_OPTION,
                  NotifyDescriptor.QUESTION_MESSAGE);

    Object result = DialogDisplayer.getDefault().notify(msg);

    //When user clicks &quot;Yes&quot;, indicating they really want to save,
    //we need to disable the Save button and Save menu item,
    //so that it will only be usable when the next change is made
    //to the text field:
    if (NotifyDescriptor.YES_OPTION.equals(result)) {
        fire(false);
        EntityManager entityManager = Persistence.createEntityManagerFactory(&quot;CustomerLibraryPU&quot;).createEntityManager();
        entityManager.getTransaction().begin();
        <strong>if (customer.getCustomerId() != null) {</strong>
            Customer c = entityManager.find(Customer.class, cude.getCustomerId());
            c.setName(jTextField1.getText());
            c.setCity(jTextField2.getText());
            entityManager.getTransaction().commit();
        <strong>} else {
            Query query = entityManager.createQuery(&quot;SELECT c FROM Customer c&quot;);
            List&lt;Customer&gt; resultList = query.getResultList();
            customer.setCustomerId(resultList.size()+1);
            customer.setName(jTextField1.getText());
            customer.setCity(jTextField2.getText());
            //adds more fields that will populate the zip and discountCode columns
            customer.setZip(&quot;12345&quot;);
            customer.setDiscountCode(entityManager.find(DiscountCode.class, 'H'));

            entityManager.persist(customer);
            entityManager.getTransaction().commit();
        }</strong>
    }

}</pre>
                <p>该代码还会在 DiscountCode 中写入一些任意的数据，因为该字段不能为空。</p>
            </li>
            <li>修复导入以导入 <tt><strong>javax.persistence.Query</strong></tt>。保存所做的更改。</li>
        </ol>

</div>


<!-- =================================================================== -->
<!-- ++++++++++++++++++++ Running the Application ++++++++++++++++++++++ -->

    <h2><a name="06"></a>生成和运行应用程序</h2>
    <p>现在，此应用程序执行三种 CRUD 功能：创建、读取和更新。您现在可以生成和运行此应用程序以检查所有功能是否都能够正常使用。</p>
    <ol>
        <li>右键单击 &quot;MavenPlatformCRUDApp - NetBeans Platform based application&quot;<strong></strong> 项目节点，然后选择“清理”。</li>
        <li>右键单击 &quot;MavenPlatformCRUDApp - NetBeans Platform based application&quot;<strong></strong> 项目节点，然后选择“使用依赖关系生成”。</li>
        <li>右键单击 &quot;MavenPlatformCRUDApp - NetBeans Platform based application&quot;<strong></strong> 项目节点，然后选择“运行”。</li>
    </ol>

    <p>单击“运行”后，IDE 会启动平台应用程序。该应用程序将使用数据库中的客户名称来填充 Customer 窗口中的树。当在 Customer 窗口中选择某个节点时，MyEditor 窗口便会显示所选客户的名称和城市。您可以修改 &quot;Name&quot; 和 &quot;City&quot; 字段中的数据并进行保存。要创建新客户，请单击工具栏上的 &quot;My New Action&quot; 按钮，在 MyEditor 窗口的空文本字段中输入名称和城市，然后单击“保存”。</p>
    <p>
    <img src="../images/tutorials/maven-crud/mavencrud-finished-app.png" alt="完成的应用程序的屏幕快照" title="显示 Customer 和 MyEditor 窗口的完成的应用程序" class="margin-around b-all"  />
    </p>
    <p class="tips">如果您没有实现保存时刷新操作，则在创建或修改客户后，需要在 Customer 窗口中刷新根节点。</p>

    <p>本教程说明了使用 Maven 创建 NetBeans 平台应用程序与使用 Ant 创建应用程序并无太大差异。主要的不同之处在于 Maven POM 控制应用程序组装的方式。有关如何生成 NetBeans 平台应用程序和模块的更多示例，请参见 <a href="https://netbeans.org/kb/trails/platform_zh_CN.html">NetBeans 平台学习资源</a>中所列的教程。</p>

 <!-- ======================================================================================== -->


    <h2><a name="nextsteps"></a>另请参见</h2>

    <p>CRUD 教程到此结束。本文档描述了如何使用 Maven 生成框架创建具有 CRUD 功能的新 NetBeans 平台应用程序。有关创建和开发应用程序的更多信息，请参见以下资源。</p>
    <ul>
        <li><a href="https://netbeans.org/kb/trails/platform_zh_CN.html">NetBeans 平台学习资源</a></li>
        <li><a href="http://bits.netbeans.org/dev/javadoc/">NetBeans API Javadoc</a></li>
    </ul>

    <p>如果您有任何有关 NetBeans 平台的问题，可随时写信至邮件列表 dev@platform.netbeans.org，或查看 <a href="https://netbeans.org/projects/platform/lists/dev/archive">NetBeans 平台邮件列表归档</a>。</p>


    <!-- ======================================================================================== -->


</body>

</html>
