blob: 79992fea044e0f63fae28ef0089e7cb7d340d286 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- -*- xhtml -*- -->
<title>针对 NetBeans 平台 6.8 的 NetBeans 插件快速入门</title>
<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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description"
content="A guide describing how to implement a Google Toolbar Module into NetBeans IDE.">
<link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css">
</head>
<!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
<!-- Use is subject to license terms.-->
<body>
<h1><a name="top"></a>NetBeans 插件快速入门</h1>
<p>欢迎了解有关开发 NetBeans 插件的知识!
<p>本教程将指导您为 NetBeans IDE 创建一个新的工具栏,从而为 NetBeans 插件的开发工作流程提供一个快速简介。学习完本教程后,您将对如何为 NetBeans IDE 创建、生成和安装插件有一个基本了解。
<p>完成本教程后,您可以继续参阅 <a href="https://netbeans.org/kb/trails/platform_zh_CN.html">NetBeans 平台学习资源</a>。该学习资源提供了综合性教程,这些教程重点介绍适用各种应用程序类型的一系列 NetBeans API。如果您不希望创建 &quot;Hello World&quot; 应用程序,则可以跳过本教程,而直接阅读学习资源。
<p><b class="notes">注意:</b>本文档使用的是 NetBeans IDE 6.8 发行版。如果使用的是早期版本,请参见<a href="67/nbm-google_zh_CN.html">本文档的 6.7 版</a></p>
<p><b>目录</b></p>
<p><img src="../images/articles/69/netbeans-stamp7-8-9.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="#creating-module-project">设置模块项目</a></li>
<li><a href="#coding-module">编写模块代码</a>
<ul>
<li><a href="#creating-action">创建操作</a></li>
<li><a href="#creating-panel">创建 JPanel 窗体</a></li>
<li><a href="#resolving-errors">解决错误</a></li>
<li><a href="#overriding">实现 Presenter.Toolbar</a></li>
</ul>
</li>
<li><a href="#compiling">编译、安装和使用模块</a>
<li><a href="#sharing-plugin">共享模块</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="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">6.7 或更高版本</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 或<br/>版本 5</td>
</tr>
</tbody>
</table>
<p class="tips">(可选)要解决疑难问题,可以<a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=13794">下载完整的样例</a>并查看其源代码。
<p>您在本教程中创建的工具栏将如下所示:</p>
<img src="../images/tutorials/google/60/googlebar-2.png" border="1"
alt="显示样例搜索字符串的 Google 工具栏">
<p><p>当用户在以上工具栏中按 Enter 键时,IDE 的缺省浏览器打开,同时工具栏中的文本会发送至 Google 搜索,并在打开的浏览器中显示搜索结果。要创建此工具栏,您可以使用 <a href="http://bits.netbeans.org/dev/javadoc/">NetBeans API</a> 来增强 IDE 的功能集。具体而言,您将创建一个由工具栏中的按钮所调用的操作。然后,再创建一个包含 GUI 组件 <tt>JLabel</tt><tt>JTextField</tt> 的 Swing JPanel。最后,您将实现用于返回 JPanel 的 <a href="http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/actions/Presenter.Toolbar.html"><tt>Presenter.Toolbar</tt></a>,以使 JPanel 显示在工具栏而不是按钮中。
<!-- ===================================================================================== -->
<br>
<h2 class="tutorial"><a name="creating-module-project"></a>设置模块项目</h2>
<p>开发模块时,必须确保正确设置项目的结构。NetBeans IDE 提供了一个模块项目向导,用于设置模块所需的全部基本文件。</p>
<ol>
<li>选择“文件”&gt;“新建项目”(Ctrl+Shift+N)。在“类别”下选择“NetBeans 模块”。在“项目”下选择“模块”。单击“下一步”。</li>
<li>在“名称和位置”面板的“项目名称”字段中键入 <tt>GoogleToolbar</tt>。将项目位置更改为计算机上的任意目录。将“独立模块”选项和“设置为主项目”复选框保留为选中状态。单击“下一步”。</li>
<li>在“基本模块配置”面板的“代码名称基”中键入 <tt>org.myorg.googletoolbar</tt>
<li>选择“生成 XML 层”。保留本地化包和 XML 层文件的位置,以将其存储在名为 <tt>org/myorg/googletoolbar</tt> 的包中。单击“完成”。</li>
</ol>
<p>IDE 将创建 <tt>GoogleToolbar</tt> 项目。此项目包含所有源代码和项目 meta 数据,例如项目的 Ant 生成脚本。此项目在 IDE 中打开。您可以在“项目”窗口 (Ctrl+1) 中查看其逻辑结构,在“文件”窗口 (Ctrl+2) 中查看其文件结构。
<p>如果展开“重要文件”节点,则可以打开“模块清单”,其内容如下所示:
<pre class="examplecode">Manifest-Version: 1.0
OpenIDE-Module: org.myorg.googletoolbar
OpenIDE-Module-Layer: org/myorg/googletoolbar/layer.xml
OpenIDE-Module-Localizing-Bundle: org/myorg/googletoolbar/Bundle.properties
OpenIDE-Module-Specification-Version: 1.0</pre>
<p>有关这些特定于 NetBeans 的清单键的详细信息,请参阅 <a href="http://bits.netbeans.org/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html">NetBeans 模块 API</a> Javadoc 描述。
<br>
<!-- ===================================================================================== -->
<br>
<h2><a name="coding-module"></a>编写模块代码</h2>
<p>要编写模块代码,需要完成以下步骤:</p>
<ul>
<li><a href="#creating-action">创建操作</a></li>
<li><a href="#creating-panel">创建 JPanel</a></li>
<li><a href="#resolving-errors">解决错误</a></li>
<li><a href="#overriding">重写 getToolbarPresenter()</a></li>
</ul>
<div class="indent">
<h3 class="tutorial"><a name="creating-action"></a>创建操作</h3>
<ol>
<li>右键单击项目节点,然后选择“新建”&gt;“操作”(如果未显示“操作”,请选择“其他”,然后在“新建文件”向导的“类别”下选择“模块开发”,此时应显示“操作”)。单击“下一步”。</li>
<li>在“操作类型”面板中保留缺省设置(IDE 可以通过此设置创建作为 <tt>ActionListener</tt> 子类的操作),如下所示:
<br><br>
<img src="../images/tutorials/google/65/action-wiz-1.png" alt="“新建操作”向导的第 1 步">
<br><br>
单击“下一步”。
<li>在“GUI 注册”面板中,从“类别”下拉列表中选择“文件”。“类别”下拉列表用于控制操作在 IDE 的快捷键编辑器中的显示位置。接下来,取消选中“全局菜单项”,然后选中“全局工具栏按钮”。在“工具栏”下拉列表中选择“文件”,然后在“位置”下拉列表中选择“下拉列表中的任何位置<i></i>”,如下所示:
<br><br>
<img src="../images/tutorials/google/65/action-wiz-2.png" />
<br><br>
单击“下一步”。
<li><p>在“名称和位置”面板的“类名”中键入 <tt>GoogleAction</tt>,在“显示名称”中键入 <tt>Google Action</tt>。找到一个尺寸为 16x16 像素的图标。实际上,您不会用到这个图标,真正显示的图标将是下面一节中创建的 JPanel 窗体。只是,“新建操作”向导要求指定一个图标。因此,该图标可以是任意尺寸,因为您根本不会用到它。单击“完成”。</p>
<p><b class="notes">注意:</b><tt>GoogleAction.java</tt> 将被添加到“项目”窗口的 <tt>org.myorg.googletoolbar</tt> 包中。
</li>
</ol>
<h3 class="tutorial"><a name="creating-panel"></a>创建 JPanel</h3>
<p>在此部分,将创建一个 JPanel 作为工具栏,它将显示在应用程序主工具栏中。
<ol>
<li>右键单击项目节点,然后选择“新建”&gt;“其他”。在“类别”下,选择“Swing GUI 窗体”。在“项目”下选择“JPanel 窗体”。单击“下一步”。</li>
<li>在“名称和位置”面板的“类名”中键入 <tt>GooglePanel</tt>,然后从下拉列表中选择包。单击“完成”。<tt>GooglePanel.java</tt> 将被添加到该包中,并在源代码编辑器的“设计”视图中将其打开。</li>
<li>将光标放在 JPanel 的右下角,然后选择 JPanel 并拖动光标来调整大小,以使其宽度和长度与工具栏类似,如下所示:
<br><br>
<img src="../images/tutorials/google/60/jpanel-2.png" border="1" alt="调整大小后的 JPanel"></li>
<li>将一个 JTextField 项和一个 JLabel 项从组件面板 (Ctrl+Shift+8) 直接拖至 JPanel 中,然后调整 JPanel 及另外两个项的大小,使它们排放适宜。最后,单击 JLabel 并将其文本更改为 <tt>Google:</tt>,然后删除 JTextField 中的缺省文本。现在,您的 JPanel 应该与下面显示的图像类似:
<br><br>
<img src="../images/tutorials/google/60/jpanel-3.png" border="1"
alt="JPanel 中包含的 JTextField 和 JLabel"></li>
<li>确保属性检查器(“窗口”&gt;“导航”&gt;“检查器”)处于打开状态,然后右键单击 JTextField 并选择“事件”&gt; &quot;Key&quot; &gt; &quot;keyTyped&quot;。这将在 <tt>GooglePanel.java</tt> 源代码中生成一个 <tt>jTextField1KeyTyped()</tt> 方法,并将其显示在源代码编辑器中,如下所示:
<br><br>
<img src="../images/tutorials/google/60/jpanel-4.png" border="1"
alt="在源代码中生成的 jTextField1KeyTyped() 方法"></li>
<li>在源代码编辑器的 <tt>GooglePanel.java</tt>“源”视图中,填写 <tt>jTextField1KeyTyped()</tt> 方法,如下所示(插入的文本以<strong>粗体</strong>显示):
<pre class="examplecode">
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {
<strong>int i = evt.getKeyChar();
if (i==10){//The ENTER KEY
// we display the google url.
try{
URLDisplayer.getDefault().showURL
(new URL(&quot;http://www.google.com/search?hl=en&amp;q=&quot;+jTextField1.getText()+&quot;&amp;btnG=Google+Search&quot;));
} catch (Exception eee){
return;//nothing much to do
}
}</strong>
}</pre>
</li>
</ol>
<p>如果需要,请在源代码编辑器中单击鼠标右键,然后选择“格式化”(Alt+Shift+F)。</p>
<h3 class="tutorial"><a name="resolving-errors"></a>解决错误</h3>
<p>请注意,某个代码行带有红色下划线,这表示存在错误。其原因是尚未导入所需的包。将光标置于紧邻 <tt>URLDisplayer</tt> 所在行(带有红色下划线)左侧的栏中显示的灯泡图标上。随即显示一条工具提示,说明出现此错误的原因:
<br><br>
<img src="../images/tutorials/google/60/tooltip.png" border="1"
alt="源代码编辑器中的 URLDisplayer 错误工具提示"></p>
<p>为了解决此错误,需要让您的项目可访问 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/HtmlBrowser.URLDisplayer.html">HtmlBrowser.URLDisplayer</a></tt> 类(包含在 <a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/package-summary.html"><tt>org.openide.awt</tt></a> 包中)。为此,请执行以下步骤:</p>
<ol>
<li>右键单击“项目”窗口中的项目节点,然后选择“属性”。在显示的“项目属性”对话框中,选择“类别”标题下的“库”。然后,在“模块依赖关系”下,单击“添加”按钮。将显示“添加模块依赖关系”对话框。</li>
<li>在“添加模块依赖关系”对话框顶部显示的过滤器文本框中,开始键入 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/HtmlBrowser.URLDisplayer.html">URLDisplayer</a></tt>,请注意返回的模块的选择范围会逐渐缩小,直到列表中仅留有“<a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/overview-summary.html">UI 实用程序 API</a>”:
<br><br>
<img src="../images/tutorials/google/60/add-module-dependency.png"
alt="显示“UI 实用程序 API”的“添加模块依赖关系”对话框">
<br><br>
单击“确定”,然后再次单击“确定”退出“项目属性”对话框。</li>
<li>在源代码编辑器中单击鼠标右键,然后选择“修复导入”(Alt+Shift+F)。将显示“修复所有导入”对话框,其中列出了针对无法识别的类的建议路径:
<br><br>
<img src="../images/tutorials/google/60/fix-all-imports.png"
alt="“修复所有导入”对话框 -- 针对无法识别的类提供了建议的路径">
<br><br>
单击“确定”。IDE 将为 <tt>GooglePanel.java</tt> 创建以下 import 语句:
<pre>
import java.net.URL;
import <a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/HtmlBrowser.URLDisplayer.html">org.openide.awt.HtmlBrowser.URLDisplayer</a>;
</pre>
另请注意,源代码编辑器中的所有错误将会消失。</li>
</ol>
<h3 class="tutorial"><a name="overriding"></a>实现 Presenter.Toolbar</h3>
<p>由于您刚创建的 JPanel 是将显示 Google 工具栏的实际组件,因此您需要实现 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/actions/Presenter.Toolbar.html">Presenter.Toolbar</a></tt> 以使该组件显示在工具栏中。在 <tt>GoogleAction.java</tt> 中,执行以下操作:</p>
<ol>
<li>打开 <tt>GoogleAction.java</tt>,将会注意到它包含以下内容:
<pre class="examplecode">
package org.myorg.googletoolbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public final class GoogleAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
// TODO implement action body
}
}</pre>
<li>更改签名,以便 <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/actions/Presenter.Toolbar.html">Presenter.Toolbar</a></tt> 也得以实现,因为您希望在工具栏中显示该操作。
<pre class="examplecode">
package org.myorg.googletoolbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public final class GoogleAction implements Presenter.Toolbar, ActionListener {
Component comp = new GooglePanel();
@Override
public void actionPerformed(ActionEvent e) {
// TODO implement action body
}
@Override
public Component getToolbarPresenter() {
return comp;
}
}</pre>
<li>打开 <tt>layer.xml</tt> 文件中,将会看到以下内容:
<pre class="examplecode">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE filesystem PUBLIC &quot;-//NetBeans//DTD Filesystem 1.2//EN&quot; &quot;https://netbeans.org/dtds/filesystem-1_2.dtd&quot;&gt;
&lt;filesystem&gt;
&lt;folder name=&quot;Actions&quot;&gt;
&lt;folder name=&quot;File&quot;&gt;
&lt;file name=&quot;org-myorg-googletoolbar-GoogleAction.instance&quot;&gt;
&lt;attr name=&quot;SystemFileSystem.localizingBundle&quot; stringvalue=&quot;org.myorg.googletoolbar.Bundle&quot;/&gt;
&lt;attr name=&quot;delegate&quot; newvalue=&quot;org.myorg.googletoolbar.GoogleAction&quot;/&gt;
&lt;attr name=&quot;displayName&quot; bundlevalue=&quot;org.myorg.googletoolbar.Bundle#CTL_GoogleAction&quot;/&gt;
&lt;attr name=&quot;iconBase&quot; stringvalue=&quot;org/myorg/googletoolbar/icon.png&quot;/&gt;
&lt;attr name=&quot;instanceCreate&quot; methodvalue=&quot;org.openide.awt.Actions.alwaysEnabled&quot;/&gt;
&lt;attr name=&quot;noIconInMenu&quot; stringvalue=&quot;false&quot;/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;folder name=&quot;Toolbars&quot;&gt;
&lt;folder name=&quot;File&quot;&gt;
&lt;file name=&quot;org-myorg-googletoolbar-GoogleAction.shadow&quot;&gt;
&lt;attr name=&quot;originalFile&quot; stringvalue=&quot;Actions/File/org-myorg-googletoolbar-GoogleAction.instance&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;0&quot;/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;/filesystem&gt;</pre>
<p><li>上面显示的内容是由“新建操作”向导创建的。删除 &quot;instanceCreate&quot; 属性,因为在本例中,您不希望创建操作类的实例。毕竟,此时您希望 JPanel 显示在该位置。
</ol>
<p>在此部分,已创建了一个用于显示 JTextField 和 JLabel 的 JPanel。在 JTextField 中按 Enter 键时,其内容将发送到 Google 搜索。HTML 浏览器打开,您会看到 Google 搜索结果。该操作类用于在 <tt>layer.xml</tt> 文件中注册的应用程序工具栏内集成 JPanel。
</div>
<!-- ======================================================================================= -->
<br>
<h2><a name="compiling"></a>编译、安装和使用模块</h2>
<p>NetBeans IDE 使用 Ant 生成脚本在 IDE 中编译和安装模块。当在上面的<a href="#creating-module-project">设置模块项目</a>一节中创建了模块项目之后,系统会自动为您创建生成脚本。现在,您可以对模块进行编译并将其添加到 IDE 中,利用 NetBeans IDE 的 Ant 支持可以执行此操作:</p>
<ol>
<li>在“项目”窗口中,右键单击 &quot;<tt>GoogleToolbar</tt>&quot; 项目节点并选择“运行”。将生成模块并将其安装在 IDE 的新实例(即目标平台)中。缺省情况下,缺省目标平台是您当前所使用的 IDE 版本。目标平台打开,您可以在其中试用新模块。</li>
<li>成功安装模块后,它会在 IDE 的“编辑”工具栏中添加一个新按钮。
<p><p><b class="notes">注意:</b>此工具栏按钮不显示图标,而是显示您在上面的<a href="#creating-panel">创建 JPanel</a> 一节中创建的 JPanel:
<br><br>
<img src="../images/tutorials/google/60/googlebar.png" border="1"
alt="在 IDE“编辑”工具栏中嵌入的 Google 工具栏"></li>
<li>在文本字段中键入一个搜索字符串:
<br><br>
<img src="../images/tutorials/google/60/googlebar-2.png" border="1"
alt="显示样例搜索字符串的 Google 工具栏"></li>
<li>按 Enter 键。如果在“选项”窗口中设置了 IDE 缺省浏览器,则会启动该浏览器。Google URL 和搜索字符串将被发送至浏览器,并且系统会执行搜索。返回搜索结果后,可以在浏览器中查看结果。</li>
</ol>
<br>
<h2 class="tutorial"><a name="sharing-plugin"></a>共享模块</h2>
<p>既然您已经生成了一个可增强 IDE 功能的有效模块,为什么不与其他开发者一起共享呢?NetBeans IDE 提供了一种创建二进制 NetBeans 模块文件 (.nbm) 的简便方法,这是允许他人可以在自己的 IDE 版本中试用该模块文件的通用方法(实际上,这就是您在上面的<a href="#compiling">编译、安装和使用模块</a>中所执行的操作)。
<p>要创建模块二进制文件,请执行以下操作:</p>
在“项目”窗口中,右键单击 &quot;GoogleToolbar&quot;<tt></tt> 项目节点,然后选择“创建 NBM”。将创建新的 NBM 文件,您可以在“文件”窗口 (Ctrl+2) 中查看它:
<br><br>
<img src="../images/tutorials/google/60/create-nbm.png" border="1" alt="在“文件”窗口中显示的新 NBM 文件">
<br>
<div class="feedback-box"><a name="feedback"></a> <a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20Google%20Toolbar%20Module%20Tutorial">请将您的意见和建议发送给我们</a></div>
<br style="clear:both;" />
<!-- ======================================================================================== -->
<h2><a name="nextsteps"></a>另请参见</h2>
<p>“NetBeans 插件快速入门”教程到此结束。本文档介绍了如何创建用于在 IDE 中添加 Google 搜索工具栏的插件。有关创建和开发插件的详细信息,请参见以下资源:
<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>
<li>本教程中使用的 NetBeans API 类:
<ul>
<li><tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-awt/org/openide/awt/HtmlBrowser.URLDisplayer.html">HtmlBrowser.URLDisplayer</a></tt>
<li><tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/actions/Presenter.Toolbar.html">Presenter.Toolbar</a></tt>
</ul>
</li>
</ul>
<hr>
<!-- ======================================================================================== -->
</body>
</html>