安装软件
开始之前,需要在您的计算机上安装以下软件:
NetBeans IDE 5.0
Java Standard Development Kit (JDK!") version 1.4.2或 5.0
安装示例
采用以下步骤来安装示例:
解压缩附加的文件。
在 IDE 中,选择 File>Open Project,然后浏览到包含已解压缩文件的文件夹。打开模块项目。其形式如下:
右键单击项目节点并在 Target Platform 中选择 Install/Reload。将打开目标平台并安装该模块。
通过使用该模块来验证其是否已正确安装,如使用模块部分所述。
知道了最终结果后,将从头开始创建模块,并且在创建的同时了解每个部分。
设置模块项目
开始编写模块前,必须确保正确地设置了项目。NetBeans IDE Dev 提供一个向导,用于设置模块所需的所有基本文件。
创建模块项目
选择 File > New Project (Ctrl-Shift-N)。在 Categories 下,选择 NetBeans Plug-in Modules。在 Projects 下,选择 Module Project 并单击 Next。
在 Name and Location 面板中,在 Project Name 中键入 ShowXMLStructure。将 Project Location 更改为您计算机上的任何目录,如 c:mymodules。选中 Standalone Module 单选按钮。选中 Set as Main Project 复选框。单击 Next。
在 Basic Module Configuration 面板中,用 myorg 替换 Code Name Base 中的 yourorghere 并将 ShowXMLStructure 更改为 xmltree,从而整个 Code Name Base 为 org.myorg.xmltree。向 Module Display Name 中添加空格将其更改为 Show XML Structure。留出本地化包和 XML 层的位置,以便它们存储在名为 org/myorg/xmltree 的包中。单击 Finish。
IDE 创建 Show XML Structure 项目。该项目包含所有资源和项目元数据,如该项目的 Ant 构建脚本。该项目在 IDE 中打开。您可以在 Projects 窗口 (Ctrl-1) 中查看其逻辑结构,在 Files 窗口 (Ctrl-2) 中查看其文件结构。例如,现在 Projects 窗口应该如下所示:
有关以上每个文件的基本信息,请参阅 NetBeans 插件模块的快速入门指南。
指定模块的依存关系
您需要将几个属于 NetBeans API 的类设为子类。每个类都将被声明为模块依存关系。使用 Project Properties 对话框来执行此操作。
在 Projects 窗口中,右键单击 System Properties 项目,然后选择 Properties。
对于以下每个 API,在 Libraries 面板中,单击“Add...”,从 Module 列表中选择名称,然后单击 OK 确认:
I/O APIs
Nodes API
Text API
Utilities API
Window System API
单击 OK,退出 Project Properties 对话框。
在 Projects 窗口中,双击 Project Metadata 并注意您选择的 API 是否声明为模块依存关系:
编写模块代码
创建操作
右键单击项目节点并选择 New > File/Folder。在 Categories 下,选择 NetBeans Module Development。在 Projects 下选择 Action。单击 Next。
在 Action Type 面板中,单击 Conditionally Enabled。选择 EditorCookie,它是允许 Source Editor 访问该 action 的类名称,如下所示:
单击 Next。
在 GUI Registration 面板中,选择 Category 下拉列表中的“Edit”类别。Category 下拉列表控制操作在 IDE 的 Keyboard Shortcuts 编辑器中显示的位置。接下来,选择 Editor Contect Menu Item,然后选择 text/xml MIME 类型,如下所示:
注意到您可以设置菜单项的位置,并且可以将它与其之前和之后的菜单项分离。单击 Next。
在 Name and Location 面板中,键入 ShowXMLStructureAction 作为 Class Name,并键入 Show XML Structure Action 作为 Display Name。上下文菜单提供的菜单项不显示图标。因此,单击 Finish,ShowXMLStructureAction.java 便添加到包中。
在 Source Editor 中,向 performAction 方法中添加以下代码?code> public void performAction(Node[] activatedNodes) {
EditorCookie cookie = (EditorCookie)activatedNodes[0].getCookie(EditorCookie.class);
String tabName = NbBundle.getMessage(ShowXMLStructureAc tion.class,"LBL_tabName");
// "XML Tree" tab is created in output window for writing the list of tags
InputOutput io = IOProvider.getDefault().getIO(tabName,false);
io.select(); //XML Tree tab is selected
OutputWriter writer = io.getOut();
try {
writer.reset(); //clean the output window
java.io.InputStream is = ((org.openide.text.CloneableEditorSupport)cookie).getInputStream();
parse(new InputSource(is));
is.close();
for (int i=0;i<tags.length;i++) {
writer.println(tags[i]); //write tag to output window
}
} catch (IOException ex) {
} catch (SAXException ex){
writer.println("Parse Error: "+ex.getMessage());
}
writer.flush();
writer.close();
}
添加新方法: /** Parses XML document and creates the list of tags
*/
private void parse(InputSource is) throws IOException, SAXException {
XMLReader xmlReader = XMLUtil.createXMLReader();
TagHandler handler = new TagHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(is);
tags = handler.getTags();
}
在源文件的顶部声明 tags 变量: private String[] tags;
按 Alt-Shift-F。IDE 会自动将 import 声明添加到类的顶部。某些代码仍然标有红色下划线,表示并不是所有所需的包都位于该类路径上。右键单击项目节点,选择 Properties,然后在 Project Properties 对话框中,单击 Libraries。在 Libraries 窗格的顶部单击 Add 并添加 Dialogs API。
在 ShowXMLStructureAction.java 类中,再次按 Alt-Shift-F。由于 IDE 在 Dialogs API 中找到了所需的包,因此红色下划线消失。
本地化操作
将显示名称添加到 Bundle.properties 文件:ACT_name=Show XML Structure
LBL_tabName=XML Structure
按 Ctrl-S 保存文件。
创建标记句柄
在 Projects 窗口中,展开项目节点,然后展开 Source Packages 节点,接着右键单击 org.myorg.xmltree 节点。选择 New > File/Folder。在 Categories 下选择 Java Classes。在 File Types 下,选择 Java Class。单击 Next 并在 Class Name 中键入 TagHandler。单击 Finish。新 Java 类将在 Source Editor 中打开。
用以下代码替换默认代码:package org.myorg.xmltree;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/** Specific XML handler used for creating list of starting and ending tags, e.g. :
* <AAA>
* <BBB>
* <CCC/>
* </BBB>
* </AAA>
*/
public class TagHandler extends org.xml.sax.helpers.DefaultHandler {
private final int indentLength=2;
private java.util.List tagList;
private String indent;
2 private String space;
private String lastElement;
TagHandler() {
tagList = new java.util.ArrayList();
StringBuffer indentBuf = new StringBuffer();
for (int i=0;i<indentLength;i++) indentBuf.append(' ');
space=indentBuf.toString();
indent="";
}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
tagList.add(indent+"<"+qName+">");
indent+=space;
h lastElement=qName;
}
public void endElement(String uri, String localName, String qName) throws SAXException {
indent=indent.substring(indentLength);
if (qName.equals(lastElement)) {
int lastIndex = tagList.size()-1;
String lastInList = (String)tagList.get(lastIndex);
String replacedString = lastInList.replace(">","/>");