当前页面: 开发资料首页 → Netbeans 专题 → NetBeans Code Snippet Module 教程
摘要: NetBeans Code Snippet Module 教程 反馈 本教程演示如何向 HTML/JSP Component Palette 添加代码片段。代码片段是一小段代码,可以从组件调色板中拖出...
本教程演示如何向 HTML/JSP Component Palette 添加代码片段。代码片段是一小段代码,可以从组件调色板中拖出并放在 Source Editor 中。它们用来加速编码的过程。HTML/JSP Component Palette 已拥有几个代码片段,但是您可能想添加一些其他的代码片段并与其他人共享。当您使用 IDE 创建包含您的代码片段的 NetBeans 模块时,IDE 为创建二进制的 NetBeans Module (NBM) 文件、分发文件并让它的收件人通过 Update Center 安装文件提供便利。
要创建代码片段,请使用 NetBeans Palette API。代码片段需要以下文件:
已经创建或向 NetBeans 模块添加以上文件之后,您在资源声明 XML 文件中声明它们,该文件是您使用 layer.xml 文件在 NetBeans System Filesystem 中注册的。
本教程将介绍以下主题:
有关使用模块的详细信息,请参阅 NetBeans 网站上的 NetBeans Development Project 主页。如果有问题,请访问 NetBeans Developer FAQ 或使用本页顶部的反馈链接。
开始之前,需要在您的计算机上安装以下软件:
采用以下步骤来安装示例:
知道了最终结果后,将从头开始创建模块,并且在创建的同时了解每个部分。
开始编写模块前,必须确保正确地设置了项目。NetBeans IDE 5.0 提供一个向导,用于设置模块所需的所有基本文件。
IDE 创建 newhtmlsnippets 项目。该项目包含所有资源和项目元数据,如该项目的 Ant 构建脚本。该项目在 IDE 中打开。您可以在 Projects 窗口 (Ctrl-1) 中查看其逻辑结构,在 Files 窗口 (Ctrl-2) 中查看其文件结构。例如,现在 Projects 窗口应该如下所示:
有关以上每个文件的基本信息,请参阅 NetBeans 插件模块的快速入门指南。
您需要子类化三个属于 NetBeans API 的类。每个类都将被声明为 Module 依存关系。使用 Project Properties 对话框来执行此操作。
<?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>
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)。
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)。
<?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)。
确保在 BR.xml 文件中已正确声明标签和提示。
<folder name="HTMLPalette"> <folder name="HTML"> <file name="BR.xml" url="resources/BR.xml"/> </folder> </folder>
当您将 BR.xml 节点拖放到 <this layer in context> 节点中时,IDE 会创建 <attr> 标记,用于将新的组件片段放置在现有组件片段之间。
IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。
模块即在目标平台中构建和安装。目标平台打开,您可以试用新的模块。默认目标平台是由开发 IDE 的当前实例使用的安装。
确保模块已正确安装:
将创建 NBM 文件并且可以在 Files 窗口中查看它 (Ctrl-2):
有关创建和开发 NetBeans 模块的更多信息,请参见以下资源:
版本
|
日期
|
更改
|
开放事件
|
1 | 2005 年 11 月 28 日 | 初始版本 |
|
2 | 2005 年 12 月 2 日 |
|
|
3 | 2005 年 12 月 8 日 |
|