NetBeans Code Snippet Module 教程
反馈
本教程演示如何向 HTML/JSP Component Palette 添加代码片段。代码片段是一小段代码,可以从组件调色板中拖出并放在 Source Editor 中。它们用来加速编码的过程。HTML/JSP Component Palette 已拥有几个代码片段,但是您可能想添加一些其他的代码片段并与其他人共享。当您使用 IDE 创建包含您的代码片段的 NetBeans 模块时,IDE 为创建二进制的 NetBeans Module (NBM) 文件、分发文件并让它的收件人通过 Update Center 安装文件提供便利。
要创建代码片段,请使用 NetBeans Palette API。代码片段需要以下文件:
- 定义将代码片段拖动到 Source Editor 中的 Java 类。
- 定义应该怎样插入代码片段的 Java 类。例如,此处定义缩进和格式。
- 定义标签和工具提示的属性文件。
- 用于“小图标”显示的 16x16 像素图像。
- 用于“大图标”显示的 32x32 像素图像。
已经创建或向 NetBeans 模块添加以上文件之后,您在资源声明 XML 文件中声明它们,该文件是您使用 layer.xml 文件在 NetBeans System Filesystem 中注册的。
本教程将介绍以下主题:
安装完软件之后,本教程可以在 20 分钟之内完成。
有关使用模块的详细信息,请参阅 NetBeans 网站上的 NetBeans Development Project 主页。如果有问题,请访问 NetBeans Developer FAQ 或使用本页顶部的反馈链接。
安装软件
开始之前,需要在您的计算机上安装以下软件:
- NetBeans IDE 5.0(下载)
- Java Standard Development Kit (JDK™) version 1.4.2(下载)或 5.0(下载)
安装示例
采用以下步骤来安装示例:
- 解压缩附加的文件。
- 在 IDE 中,选择 File > Open Project,然后浏览到包含已解压缩文件的文件夹。打开模块项目。其形式如下:
- 右键单击项目节点并在 Target Platform 中选择 Install/Reload。将打开目标平台并安装该模块。
- 确保模块已正确安装:
- 右键单击 newhtmlsnippets 项目节点并选择 New > File/Folder,然后在 Other 类别中选择 HTML File。单击 Next,然后单击 Finish。将打开 HTML 文件,其中显示 Component Palette 和一个附加代码片段,以及一个显示项目拖放结果的工具提示。
- 将“New Line”项目拖动到 Source Editor 中,并注意到新的 <br> 标记已插入到光标的位置。
- 右键单击 Component Palette,然后选择 Show Big Icons。注意到所有图表都变大了。
知道了最终结果后,将从头开始创建模块,并且在创建的同时了解每个部分。
设置模块项目
开始编写模块前,必须确保正确地设置了项目。NetBeans IDE 5.0 提供一个向导,用于设置模块所需的所有基本文件。
创建模块项目
- 选择 File > New Project (Ctrl-Shift-N)。在 Categories 下,选择 NetBeans Plug-in Modules。在 Projects 下,选择 Module Project 并单击 Next。
- 在 Name and Location 面板中,在 Project Name 中键入 newhtmlsnippets。将 Project Location 更改为您计算机上的任何目录,如 c:\mymodules。选择 Standalone Module 单选按钮和 Set as Main Project 复选框。单击 Next。
- 在 Basic Module Configuration 面板中,用 org.netbeans.modules 替换 Code Name Base 中的 yourorghere,从而整个 Code Name Base 为 org.netbeans.modules.newhtmlsnippets。留出本地化包和 XML 层的位置,以便它们存储在名为 org/netbeans/modules/newhtmlsnippets 的包中。单击 Finish。
IDE 创建 newhtmlsnippets 项目。该项目包含所有资源和项目元数据,如该项目的 Ant 构建脚本。该项目在 IDE 中打开。您可以在 Projects 窗口 (Ctrl-1) 中查看其逻辑结构,在 Files 窗口 (Ctrl-2) 中查看其文件结构。例如,现在 Projects 窗口应该如下所示:
有关以上每个文件的基本信息,请参阅 NetBeans 插件模块的快速入门指南。
指定模块的依存关系
您需要子类化三个属于 NetBeans API 的类。每个类都将被声明为 Module 依存关系。使用 Project Properties 对话框来执行此操作。
- 在 Projects 窗口中,右键单击 newhtmlsnippets 项目节点并选择 Properties。在 Project Properties 对话框中单击 Libraries。
- 对于以下每个 API,单击“Add...”,从 Module 列表中选择名称,然后单击 OK 确认:
- 单击 OK,退出 Project Properties 对话框。
- 在 Projects 窗口中,展开 Important Files 节点,双击 Project Metadata 节点,并注意查看您选择的 API 是否按模块依存关系进行了声明:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.apisupport.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/nb-module-project/2">
<code-name-base>org.netbeans.modules.newhtmlsnippets</code-name-base>
<standalone/>
<module-dependencies>
<dependency>
<code-name-base>org.netbeans.modules.editor.lib</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.9.0.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.spi.palette</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>0</release-version>
<specification-version>1.5</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.openide.text</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>6.9</specification-version>
</run-dependency>
</dependency>
</module-dependencies>
<public-packages/>
</data>
</configuration>
</project>
编写模块代码
创建代码片段
- 右键单击 org.netbeans.modules.newhtmlsnippets 节点并选择 New > Java Class。在 Class Name 中,键入 BR,确保选中 Package 下拉列表中的 org.netbeans.modules.newhtmlsnippets 包,然后单击 Finish。
- 用以下内容替换 BR.java 文件的默认内容:
package org.netbeans.modules.newhtmlsnippets;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import org.netbeans.modules.newhtmlsnippets.HTMLPaletteUtilities;
import org.openide.text.ActiveEditorDrop;
public class BR implements ActiveEditorDrop {
public BR() {
}
private String createBody() {
String Br = "<br>";
return Br;
}
public boolean handleTransfer(JTextComponent targetComponent) {
String body = createBody();
try {
HTMLPaletteUtilities.insert(body, targetComponent);
} catch (BadLocationException ble) {
return false;
}
return true;
}
}
右键单击 Source Editor,然后选择 Reformat Code (Ctrl-Shift-F)。
定义插入和格式
- 右键单击 org.netbeans.modules.newhtmlsnippets 节点并选择 New > Java Class。在 Class Name 中,键入 HTMLPaletteUtilities,确保选中 Package 下拉列表中的 org.netbeans.modules.newhtmlsnippets 包,然后单击 Finish。
- 用以下内容替换 HTMLPaletteUtilities.java 文件的默认内容:
package org.netbeans.modules.newhtmlsnippets;
import javax.swing.text.BadLocationException;
import javax.swing.text.Caret;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import org.netbeans.editor.BaseDocument;
import org.netbeans.editor.Formatter;
public class HTMLPaletteUtilities {
public static void insert(String s, JTextComponent target)
throws BadLocationException {
insert(s, target, true);
}
public static void insert(String s, JTextComponent target, boolean reformat)
throws BadLocationException {
if (s == null)
s = "";
Document doc = target.getDocument();
if (doc == null)
return;
if (doc instanceof BaseDocument)
((BaseDocument)doc).atomicLock();
int start = insert(s, target, doc);
if (reformat && start >= 0 && doc instanceof BaseDocument) { // format the inserted text
int end = start + s.length();
Formatter f = ((BaseDocument)doc).getFormatter();
f.reformat((BaseDocument)doc, start, end);
}
if (doc instanceof BaseDocument)
((BaseDocument)doc).atomicUnlock();
}
private static int insert(String s, JTextComponent target, Document doc)
throws BadLocationException {
int start = -1;
try {
//at first, find selected text range
Caret caret = target.getCaret();
int p0 = Math.min(caret.getDot(), caret.getMark());
int p1 = Math.max(caret.getDot(), caret.getMark());
doc.remove(p0, p1 - p0);
//replace selected text by the inserted one
start = caret.getDot();
doc.insertString(start, s, null);
} catch (BadLocationException ble) {}
return start;
}
}
右键单击 Source Editor,然后选择 Reformat Code (Ctrl-Shift-F)。
注册模块
声明资源
- 右键单击 org.netbeans.modules.newhtmlsnippets 节点并选择 New > File/Folder。在 XML 文件夹中选择 XML Document,然后单击 Next。在 File Name 中键入 BR。在 Folder 中 src\org\netbeans\modules\newhtmlsnippets 的结尾键入 \resources。单击 Finish。
- 用以下内容替换 BR.xml 文件的默认内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE editor_palette_item PUBLIC "-//NetBeans//Editor Palette Item 1.0//EN"
"http://www.netbeans.org/dtds/editor-palette-item-1_0.dtd">
<editor_palette_item version="1.0">
<class name="org.netbeans.modules.newhtmlsnippets.BR" />
<icon16 urlvalue="org/netbeans/modules/newhtmlsnippets/resources/BR16.png" />
<icon32 urlvalue="org/netbeans/modules/newhtmlsnippets/resources/BR32.png" />
<description localizing-bundle="org.netbeans.modules.newhtmlsnippets.Bundle"
display-name-key="NAME_html-BR"
tooltip-key="HINT_html-BR" />
</editor_palette_item>
右键单击 Source Editor,然后选择 Reformat Code (Ctrl-Shift-F)。
- 向新的 resources 文件夹中添加一个 16x16 像素的图标和一个 32x32 像素的图标。将它们命名为 BR16.png 和 BR32.png。它们还可以采用其他图标格式,如 GIF 或 JPG。确保在 BR.xml 文件中已正确声明该资源。
- 将以下内容添加到 Bundle.properties 文件:
确保在 BR.xml 文件中已正确声明标签和提示。
注册资源
- 将以下标记添加到 layer.xml 文件中,置于 <filesystem> 标记之间:
<folder name="HTMLPalette">
<folder name="HTML">
<file name="BR.xml" url="resources/BR.xml"/>
</folder>
</folder>
- 展开 Important Files 节点,再展开 XML Layer 节点,然后等待显示子节点。
- 展开 <this layer in context>。对应于在 IDE 中注册的每个模块的每个 layer.xml 文件所声明的每个文件夹,将将出现一个文件夹。注意到 HTMLPalette 文件夹标记为粗体。这就是您在自己的 layer.xml 文件中添加文件夹的位置。展开该文件夹并注意到它的子文件夹、HTML 也都是粗体。展开 HTML 文件夹,注意您声明的 BR.xml 资源声明文件已经被添加到其他模块提供的资源声明文件中。当您右键单击节点时,有几个选项可用:
- 拖动 BR.xml 节点并将其放置在 TABLE.xml 节点下面。双击 Important Files 中的 Layer XML 节点,注意已经添加了两个新标记,一个在 <file name="BR.xml" url="resources/BR.xml"/> 行的前面,一个在后面:
当您将 BR.xml 节点拖放到 <this layer in context> 节点中时,IDE 会创建 <attr> 标记,用于将新的组件片段放置在现有组件片段之间。
构建和安装模块
IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。
安装模块
使用模块
确保模块已正确安装:
- 右键单击 newhtmlsnippets 项目节点并选择 New > File/Folder,然后在 Other 类别中选择 HTML File。单击 Next,然后单击 Finish。将打开 HTML 文件,其中显示 Component Palette 和一个附加代码片段,以及一个显示项目拖放结果的工具提示。
- 将“New Line”项目拖动到 Source Editor 中,并注意到新的 <br> 标记已插入到光标的位置。
- 右键单击 Component Palette,然后选择 Show Big Icons。注意到所有图表都变大了。
创建可共享的模块二进制文件
- 在 Projects 窗口中,右键单击 newhtmlsnippet 项目,并选择 Create NBM。
将创建 NBM 文件并且可以在 Files 窗口中查看它 (Ctrl-2):
- 通过电子邮件使其他人也可以使用该模块。
- 收件人可以通过使用 Update Center 来安装该模块。从主菜单中选择 Tools > Update Center。
下一步
有关创建和开发 NetBeans 模块的更多信息,请参见以下资源:
版本控制
|
版本
|
日期
|
更改
|
开放事件
|
|
1
|
2005 年 11 月 28 日
|
初始版本
|
- 它与 Swing/AWT Components 相同吗?
- 怎样使格式/缩进不同?
- 需要添加对于添加自己的对话框以及对于预定义值的解释。
- 需要新的 Component Palette 的屏幕截图,以便在现有的 Table 片段下显示新的片段。
- 将添加使用 NetBeans API 的解释性文本。
- 介绍如何在调色板之间通过阴影文件共享片段。
|
|
2
|
2005 年 12 月 2 日
|
|
|
|
3
|
2005 年 12 月 8 日
|
|
|