logo

Navigation:First_Community->Software->Java Goto:New TopicSettingSearch
NetBeans Editor Extension 模块教程
Posted by: keven Date: April 4, 2008 12:27AM
摘要: NetBeans Editor Extension 模块教程 反馈 本教程演示如何创建扩展 IDE 的一个编辑器所提供功能的模块。IDE 具有几个编辑器,例如 XML 编辑器、Java 编辑器、JSP... NetBeans Editor Extension 模块教程

MegaEntry - Social networking and discussion site!

反馈

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

本教程将介绍以下主题:

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

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

安装软件

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

  • NetBeans IDE 5.0(下载
  • Java Standard Development Kit (JDK! ") version 1.4.2(下载)或 5.0(下载

安装示例

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

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



Prev:NetBeans Anagram Game 模块教程Next:NetBeans Copy Class Refactoring 模块...

Reply To This Message
Subject: 

IE 6.0 or above is perfect