站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Netbeans 专题NetBeans Editor Extension 模块教程

NetBeans Editor Extension 模块教程

摘要: NetBeans Editor Extension 模块教程 反馈 本教程演示如何创建扩展 IDE 的一个编辑器所提供功能的模块。IDE 具有几个编辑器,例如 XML 编辑器、Java 编辑器、JSP...
NetBeans Editor Extension 模块教程

反馈

本教程演示如何创建扩展 IDE 的一个编辑器所提供功能的模块。IDE 具有几个编辑器,例如 XML 编辑器、Java 编辑器、JSP 编辑器和 SQL 编辑器。一般情况下所有 IDE 的编辑器都统称为源码编辑器 (Source Editor)。但是,每个编辑器是不同的,它的功能以它所在的文件类型为目标。在本教程中,您向 XML 编辑器添加一个操作。创建和安装该模块之后,您打开 XML 文件,该编辑器的上下文菜单将包含在 Output 窗口中显示 XML 文件标记的菜单项。

本教程将介绍以下主题:

安装完软件之后,本教程可以在 45 分钟之内完成。

有关使用模块的详细信息,请参阅 NetBeans 网站上的 NetBeans Development Project 主页。如果有问题,请访问 NetBeans Developer FAQ 或使用本页顶部的反馈链接。


安装软件

开始之前,需要在您的计算机上安装以下软件:


安装示例

采用以下步骤来安装示例:

  1. 解压缩附加的文件
  2. 在 IDE 中,选择 File > Open Project,然后浏览到包含已解压缩文件的文件夹。打开模块项目。其形式如下:

  3. 右键单击项目节点并在 Target Platform 中选择 Install/Reload。将打开目标平台并安装该模块。
  4. 通过使用该模块来验证其是否已正确安装,如使用模块部分所述。

知道了最终结果后,将从头开始创建模块,并且在创建的同时了解每个部分。


设置模块项目

开始编写模块前,必须确保正确地设置了项目。NetBeans IDE Dev 提供一个向导,用于设置模块所需的所有基本文件。

创建模块项目

  1. 选择 File > New Project (Ctrl-Shift-N)。在 Categories 下,选择 NetBeans Plug-in Modules。在 Projects 下,选择 Module Project 并单击 Next。
  2. 在 Name and Location 面板中,在 Project Name 中键入 ShowXMLStructure。将 Project Location 更改为您计算机上的任何目录,如 c:\mymodules。选中 Standalone Module 单选按钮。选中 Set as Main Project 复选框。单击 Next。
  3. 在 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 对话框来执行此操作。

  1. 在 Projects 窗口中,右键单击 System Properties 项目,然后选择 Properties。
  2. 对于以下每个 API,在 Libraries 面板中,单击“Add...”,从 Module 列表中选择名称,然后单击 OK 确认:
    • I/O APIs
    • Nodes API
    • Text API
    • Utilities API
    • Window System API
  3. 单击 OK,退出 Project Properties 对话框。
  4. 在 Projects 窗口中,双击 Project Metadata 并注意您选择的 API 是否声明为模块依存关系:

编写模块代码


创建操作

  1. 右键单击项目节点并选择 New > File/Folder。在 Categories 下,选择 NetBeans Module Development。在 Projects 下选择 Action。单击 Next。
  2. 在 Action Type 面板中,单击 Conditionally Enabled。选择 EditorCookie,它是允许 Source Editor 访问该 action 的类名称,如下所示:

    单击 Next。

  3. 在 GUI Registration 面板中,选择 Category 下拉列表中的“Edit”类别。Category 下拉列表控制操作在 IDE 的 Keyboard Shortcuts 编辑器中显示的位置。接下来,选择 Editor Contect Menu Item,然后选择 text/xml MIME 类型,如下所示:

    注意到您可以设置菜单项的位置,并且可以将它与其之前和之后的菜单项分离。单击 Next。

  4. 在 Name and Location 面板中,键入 ShowXMLStructureAction 作为 Class Name,并键入 Show XML Structure Action 作为 Display Name。上下文菜单提供的菜单项不显示图标。因此,单击 Finish,ShowXMLStructureAction.java 便添加到包中。
  5. 在 Source Editor 中,向 performAction 方法中添加以下代码:
        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();
        }
  6. 添加新方法:
         /** 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();
        }
  7. 在源文件的顶部声明 tags 变量:
        private String[] tags;
  8. 按 Alt-Shift-F。IDE 会自动将 import 声明添加到类的顶部。某些代码仍然标有红色下划线,表示并不是所有所需的包都位于该类路径上。右键单击项目节点,选择 Properties,然后在 Project Properties 对话框中,单击 Libraries。在 Libraries 窗格的顶部单击 Add 并添加 Dialogs API。

    ShowXMLStructureAction.java 类中,再次按 Alt-Shift-F。由于 IDE 在 Dialogs API 中找到了所需的包,因此红色下划线消失。

本地化操作

  1. 将显示名称添加到 Bundle.properties 文件:
    ACT_name=Show XML Structure
    LBL_tabName=XML Structure
  2. 按 Ctrl-S 保存文件。

创建标记句柄

  1. 在 Projects 窗口中,展开项目节点,然后展开 Source Packages 节点,接着右键单击 org.myorg.xmltree 节点。选择 New > File/Folder。在 Categories 下选择 Java Classes。在 File Types 下,选择 Java Class。单击 Next 并在 Class Name 中键入 TagHandler。单击 Finish。新 Java 类将在 Source Editor 中打开。
  2. 用以下代码替换默认代码:
    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;
            }
        }
  3. 按 Ctrl-S 保存文件。

构建和安装模块

IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。

安装模块

  • 在 Projects 窗口,右键单击 Show XML Structure 项目并在 Target Platform 中选择 Install/Reload。

    模块即在目标 IDE 或平台中构建和安装。目标 IDE 或平台打开,您可以试用新的模块。默认目标 IDE 或平台是由开发 IDE 的当前实例使用的安装平台。注意到当您运行模块时,您将使用临时测试用户目录,而不是开发 IDE 的用户目录。

使用模块

  1. 选择 File > New Project (Ctrl-Shift-N) 创建一个新项目。
  2. 在 Files 窗口 (Ctrl-2) 中,展开项目节点,接着展开 nbproject 节点。双击 build-impl.xml,以便它在 Source Editor 中打开。
  3. 右键单击 Source Editor 中的任何位置并注意名为“Show XML Structure”的新弹出菜单项:

  4. 选择该菜单项并注意标记句柄将所有标记打印到位于 IDE 底部的 Output 窗口:

  5. 新文件类型将在 Source Editor 中打开。例如,打开一个 Java 类。右键单击 Source Editor 中的任何位置并注意上下文菜单中不包含新的弹出菜单项:

创建可共享的模块二进制文件

  1. 在 Projects 窗口中,右键单击 Show XML Structure 项目,并选择 Create NBM。

    将创建 NBM 文件并且可以在 Files 窗口中查看它 (Ctrl-2):

  2. 通过电子邮件使其他人也可以使用。

卸载模块

  1. 关闭您安装模块时打开的 IDE 或 Platform 实例。
  2. 在 Projects 窗口中右键单击该项目节点,并选择 Clean。现在您将不再有模块安装在 IDE 或 Platform 中。

下一步

有关创建和开发模块的更多信息,请参见以下资源:


版本控制

版本
日期
更改
1 2005 年 7 月 11 日 初始版本
2 2005 年 9 月 27 日
  • 添加了 Action 向导
  • 将“NetBeans Tag Handler 插件教程”重新命名为“NetBeans Source Editor Extension 模块教程”。
  • 添加了下面的事件 7。
3 2005 年 9 月 28 日
  • 由于“Source Editor”不包含 SQL 编辑器(还可以在本教程中使用一些步骤进行扩展),因此,对该教程进行重新命名。
  • 重新编写介绍性段落。

事件编号 描述 状态
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 操作是单独的文件,而它们又是相同的文件,因此需要更改可下载代码。由于相同的原因,也必须更改一个文件的屏幕截图,而不是更改上面显示的两个文件的屏幕截图。 有待解决。




↑返回目录
前一篇: NetBeans Copy Class Refactoring 模块教程
后一篇: NetBeans Anagram Game 模块教程