MegaEntry 网络社区与信息交流平台!
本教程演示如何创建扩展 IDE 的一个编辑器所提供功能的模块。IDE 具有几个编辑器,例如 XML 编辑器、Java 编辑器、JSP 编辑器和 SQL 编辑器。一般情况下所有 IDE 的编辑器都统称为源码编辑器 (Source Editor)。但是,每个编辑器是不同的,它的功能以它所在的文件类型为目标。在本教程中,您向 XML 编辑器添加一个操作。创建和安装该模块之后,您打开 XML 文件,该编辑器的上下文菜单将包含在 Output 窗口中显示 XML 文件标记的菜单项。
本教程将介绍以下主题:
有关使用模块的详细信息,请参阅 NetBeans 网站上的 NetBeans Development Project 主页。如果有问题,请访问 NetBeans Developer FAQ 或使用本页顶部的反馈链接。
开始之前,需要在您的计算机上安装以下软件:
采用以下步骤来安装示例:
知道了最终结果后,将从头开始创建模块,并且在创建的同时了解每个部分。
开始编写模块前,必须确保正确地设置了项目。NetBeans IDE Dev 提供一个向导,用于设置模块所需的所有基本文件。
IDE 创建 Show XML Structure 项目。该项目包含所有资源和项目元数据,如该项目的 Ant 构建脚本。该项目在 IDE 中打开。您可以在 Projects 窗口 (Ctrl-1) 中查看其逻辑结构,在 Files 窗口 (Ctrl-2) 中查看其文件结构。例如,现在 Projects 窗口应该如下所示:
有关以上每个文件的基本信息,请参阅 NetBeans 插件模块的快速入门指南。
您需要将几个属于 NetBeans API 的类设为子类。每个类都将被声明为模块依存关系。使用 Project Properties 对话框来执行此操作。
单击 Next。
注意到您可以设置菜单项的位置,并且可以将它与其之前和之后的菜单项分离。单击 Next。
public void performAction(Node[] activatedNodes) {
EditorCookie cookie = (EditorCookie)activatedNodes[0].getCookie(EditorCookie.class);
String tabName = NbBundle.getMessage(ShowXMLStructureAction.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();
}
private String[] tags;
在 ShowXMLStructureAction.java 类中,再次按 Alt-Shift-F。由于 IDE 在 Dialogs API 中找到了所需的包,因此红色下划线消失。
ACT_name=Show XML Structure LBL_tabName=XML Structure
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;
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;
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( "> ", "/> ");
tagList.set(lastIndex,replacedString);
} else {
tagList.add(indent+ "</ "+qName+ "> ");
}
lastElement=null;
}
String[] getTags() {
String[] tags = new String[tagList.size()];
tagList.toArray(tags);
return tags;
}
}
IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。
模块即在目标 IDE 或平台中构建和安装。目标 IDE 或平台打开,您可以试用新的模块。默认目标 IDE 或平台是由开发 IDE 的当前实例使用的安装平台。注意到当您运行模块时,您将使用临时测试用户目录,而不是开发 IDE 的用户目录。
将创建 NBM 文件并且可以在 Files 窗口中查看它 (Ctrl-2):
有关创建和开发模块的更多信息,请参见以下资源:
|
版本
|
日期
|
更改
|
| 1 | 2005 年 7 月 11 日 | 初始版本 |
| 2 | 2005 年 9 月 27 日 |
|
| 3 | 2005 年 9 月 28 日 |
|
| 事件编号 | 描述 | 状态 |
| 1 | 代码和教程本身需要检查。 | 有待解决。 |
| 2 | 阶段 III 和阶段 IV 完成之后,需要更新教程。 | 有待解决。 |
| 3 | 本教程中使用的一些 API 拥有已废弃的方法。这将在 Output 窗口中产生错误,但是不应该影响模块的功能。 | 有待解决。 |
| 4 | 将为所有 API、类和方法添加清晰的解释和到 Javadoc 的链接。还要添加每个依存关系的链接以及本教程需要它们的原因。 | 有待解决。 |
| 5 | 应该提到 JSP 编辑器、HTML 编辑器等其他标识符。例如,不使用“xml”(在 layer.xml 中),而使用“html”、“x-properties”、“base”等等。 | 有待解决。 |
| 6 | 解释什么是 cookie。解释什么是 cookie 操作。 | 有待解决。 |
| 7 | 由于当前在可下载的代码中标记句柄和显示 XML 操作是单独的文件,而它们又是相同的文件,因此需要更改可下载代码。由于相同的原因,也必须更改一个文件的屏幕截图,而不是更改上面显示的两个文件的屏幕截图。 | 有待解决。 |