当前页面: 开发资料首页 → Netbeans 专题 → NetBeans Editor Extension 模块教程
摘要: NetBeans Editor Extension 模块教程 反馈 本教程演示如何创建扩展 IDE 的一个编辑器所提供功能的模块。IDE 具有几个编辑器,例如 XML 编辑器、Java 编辑器、JSP...
本教程演示如何创建扩展 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 操作是单独的文件,而它们又是相同的文件,因此需要更改可下载代码。由于相同的原因,也必须更改一个文件的屏幕截图,而不是更改上面显示的两个文件的屏幕截图。 | 有待解决。 |