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

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

NetBeans Anagram Game 模块教程

摘要: NetBeans Anagram Game 模块教程 反馈 本教程演示 NetBeans Windows API 的各个方面。它介绍如何在 IDE 中通过顶部组件停靠或嵌入 NetBeans Anag...
NetBeans Anagram Game 模块教程

反馈

本教程演示 NetBeans Windows API 的各个方面。它介绍如何在 IDE 中通过顶部组件停靠或嵌入 NetBeans Anagram Game。顶部组件可能与单个窗口相对应,但是也可能与窗口中的选项卡相对应。可以停靠或取消停靠、拥有选定的节点、提供操作并提供其他支持功能。有关顶部组件的技术详细信息,请参阅 Class TopComponent(位于 NetBeans API 列表中)。

本教程将介绍以下主题:

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

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


安装软件

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

安装示例

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

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

  3. 右键单击项目节点并在 Target Platform 中选择 Install/Reload。将打开目标平台并安装该模块。

    注意到您拥有了一个新菜单:

  4. 选择新菜单。打开 Anagram Game 以及 Projects 窗口、Files 窗口和 Runtime 窗口并以“explorer”模式停靠。
  5. 玩游戏。

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


设置项目

创建模块项目

  1. 选择 File > New Project (Ctrl-Shift-N)。在 Categories 下,选择 NetBeans Plug-in Modules。在 Projects 下,选择 Module Project 并单击 Next。
  2. 在 Name and Location 面板中,在 Project Name 中键入 AnagramPlugin。将 Project Location 更改为您计算机上的任何目录,如 c:\mymodules。选择 Standalone Module 单选按钮和 Set as Main Project 复选框。单击 Next。
  3. 在 Basic Module Configuration 面板中,将代码名称基础更改为 com.toy.anagrams。留出本地化包和 XML 层的位置,以便它们存储在名为 com/toy/anagrams 的包中。单击 Finish。

    IDE 创建 AnagramPlugin 项目。该项目包含所有资源和项目元数据,如该项目的 Ant 构建脚本。该项目在 IDE 中打开。您可以在 Projects 窗口 (Ctrl-1) 中查看其逻辑结构,在 Files 窗口 (Ctrl-2) 中查看其文件结构。例如,现在 Projects 窗口应该如下所示:

    有关以上每个文件的基本信息,请参阅 NetBeans 插件模块的快速入门指南

重新实现 Anagram Game

接下来,您需要获得与 IDE 一起打包的 NetBeans Anagram Game。拥有它之后,您将替换它的其中一个类,代替使用 JFrame,您需要使用 JComponent。然后,在以下部分中,您将添加一个扩展 Class TopComponent 的类和一个扩展 Class CallableSystemAction 的操作。

  1. 选择 File > New Project (Ctrl-Shift-N)。在 Categories 下选择 Samples,然后选择 General。在 Projects 下,选择 Anagram Game 并单击 Next。接受默认值并单击 Finish。
  2. 展开 AnagramGame 节点及其 Source Packages 节点。使用鼠标将 com.toy.angrams.lib 包和 com.toy.angrams.ui 包拖动到 AnagramPlugin 节点的 Source Packages 节点中。现在 Projects 窗口应该显示如下:

  3. 展开 com.toy.anagrams.ui 包,右键单击 Anagrams.java,然后选择 Delete。单击此处下载组件版本的 Anagrams.java 并将其放置在 com.toy.anagrams.ui 包中。

    Anagrams.java 的组件版本和原始版本之间的区别如下:

    • 组件版本的 Anagrams.java 使用 JComponent 而不是 JFrame
    • 由于组件停靠在不支持菜单栏的模式中,因此组件版本的 Anagrams.java 没有菜单栏。
    • 由于 Anagram Game 将是与 IDE 一起关闭的插件,因此,对于组件版本的 Anagrams.java 没有 exitMenuItemActionPerformedexitForm

    注意,您可以使用 IDE 来区分组件版本的 Anagrams.java 和它的原始版本。要完成此操作,请重新创建 Anagram Game,选择两个 Anagrams.java 文件,右键单击,然后在上下文菜单中选择 Tools > Diff。


停靠 Anagram Game

使用 Window Component 向导

  1. 右键单击 AnagramPlugin 项目节点并选择 New > Window Component。单击 Next。
  2. 在 Basic Settings 面板中,选择 explorer 并选择 Open on Application Start。

    Basic Settings 面板应该如下所示:

    单击 Next。

  3. 在 Name and Location 面板中,键入 AnagramGame 作为 Class Name Prefix 并浏览到作为新文件类型的图标的任何 16x16 像素的图像文件,如下所示。

    注意到在 NetBeans 安装目录中发现了几个 16x16 像素图像文件,例如,在以下位置:

    enterprise2\jakarta-tomcat-5.5.7\server\webapps\admin\images.

    对于本教程,只使用上面目录中的 Datasource.gif 图像。其形式如下:

  4. 单击 Finish。

    现在 Projects 窗口应该显示如下:

    IDE 在 com.toy.anagrams 中创建 AnagramGameTopComponent.java 并在 Source Editor 中打开它。这是您应该看到的(单击该链接可以看到相关的 NetBeans API Javadoc):

    package com.toy.anagrams;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.io.Serializable;
    import org.openide.util.NbBundle;
    import org.openide.util.RequestProcessor;
    import org.openide.util.Utilities;
    import org.openide.windows.TopComponent;
    
    /**
     * Top component which displays something.
     */
    final class AnagramGameTopComponent extends TopComponent {
    
        private static final long serialVersionUID = 1L;
    
        private static AnagramGameTopComponent instance;
    
        private AnagramGameTopComponent() {
            initComponents();
            setName(NbBundle.getMessage(AnagramGameTopComponent.class, "CTL_AnagramGameTopComponent"));
            setToolTipText(NbBundle.getMessage(AnagramGameTopComponent.class, "HINT_AnagramGameTopComponent"));
            setIcon(Utilities.loadImage("com/toy/anagrams/Datasource.gif", true));
        }
    
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        //                          
        private void initComponents() {
    
            setLayout(new java.awt.BorderLayout());
    
        }
        //                        
    
        // Variables declaration - do not modify                    
        // End of variables declaration                  
    
        /**
         * Gets default instance. Don't use directly, it reserved for '.settings' file only,
         * i.e. deserialization routines, otherwise you can get non-deserialized instance.
         */
        public static synchronized AnagramGameTopComponent getDefault() {
            if (instance == null) {
                instance = new AnagramGameTopComponent();
            }
            return instance;
        }
    
        public int getPersistenceType() {
            return TopComponent.PERSISTENCE_ALWAYS;
        }
    
        public void componentOpened() {
            // TODO add custom code on component opening
        }
    
        public void componentClosed() {
            // TODO add custom code on component closing
        }
    
        /** replaces this in object stream */
        public Object writeReplace() {
            return new ResolvableHelper();
        }
    
        protected String preferredID() {
            return "AnagramGameTopComponent";
        }
    
        final static class ResolvableHelper implements Serializable {
            private static final long serialVersionUID = 1L;
            public Object readResolve() {
                return AnagramGameTopComponent.getDefault();
            }
        }
    
    }

    IDE 还创建 AnagramGameAction.java。这是用于打开该窗口的操作类(单击该链接可以看到相关的 NetBeans API Javadoc):

    package com.toy.anagrams;
    
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    import javax.swing.ImageIcon;
    import org.openide.ErrorManager;
    import org.openide.util.NbBundle;
    import org.openide.util.Utilities;
    import org.openide.windows.TopComponent;
    import org.openide.windows.WindowManager;
    
    /**
     * Action which shows AnagramGame component.
     */
    public class AnagramGameAction extends AbstractAction {
    
        public AnagramGameAction() {
            putValue(NAME, NbBundle.getMessage(AnagramGameAction.class, "CTL_AnagramGameAction"));
            putValue(SMALL_ICON, new ImageIcon(Utilities.loadImage("com/toy/anagrams/Datasource.gif", true)));
        }
    
        public void actionPerformed(ActionEvent evt) {
            TopComponent win = WindowManager.getDefault().findTopComponent("AnagramGameTopComponent");
            if (win == null) {
                ErrorManager.getDefault().log(ErrorManager.WARNING, "Cannot find AnagramGame component.");
                return;
            }
            win.open();
            win.requestActive();
        }
    
    }

    IDE 将在 layer.xml 文件中作为菜单项和工具栏按钮注册 action 类:

    <filesystem>
      
        <folder name="Actions">
            <folder name="Window">
                <file name="com-toy-anagrams-AnagramGameAction.instance"/>
            </folder>
        </folder>
    
        <folder name="Menu">
            <folder name="Window">
                <file name="AnagramGameAction.shadow">
                    <attr name="originalFile" stringvalue="Actions/Window/com-toy-anagrams-AnagramGameAction.instance"/>
                </file>
            </folder>
        </folder>
    
        <folder name="Windows2">
            <folder name="Components">
                <file name="AnagramGameTopComponent.settings" url="AnagramGameTopComponent.xml"/>
            </folder>
            <folder name="Modes">
                <folder name="explorer">
                    <file name="AnagramGameTopComponent.wstcref" url="AnagramGameTopComponent_1.xml"/>
                </folder>
            </folder>
        </folder>
    
    </filesystem>

    当您打开 AnagramGameTopComponent.java 时,单击 Design,将打开 Form Editor:

    正常情况下您可以使用 Form Editor 来设计您的顶部组件。但在本例中,我们重新使用在本教程开始部分下载的组件版本的 Anagram.java 类。下一步将向您介绍如何执行该操作。

  5. 在 Source Editor 中,向 AnagramGameTopComponent.java 中添加以下方法:
    protected void initAnagrams(){
        new Anagrams(this);
    }

    然后更改构造函数以便调用新的方法:

    private AnagramGameTopComponent() {
       initAnagrams();
       setName(NbBundle.getMessage(AnagramGameTopComponent.class, "CTL_AnagramGameTopComponent"));
       setToolTipText(NbBundle.getMessage(AnagramGameTopComponent.class, "HINT_AnagramGameTopComponent"));
       setIcon(Utilities.loadImage("com/toy/anagrams/Datasource.gif", true));
    }

    调用 initAnagrams() 的行带有下划线并标记为错误,类似于以下说明。这是因为相关的包尚未得到声明。

    在 Source Editor 中,单击 Alt-Shift-F。com.toy.anagrams.ui.Anagrams 的 import 语句即被添加到该类的顶部。

插件模块到此结束。接着,您需要安装和使用它。

构建和安装模块

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

安装 NetBeans 模块

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

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

使用模块

  1. 在 IDE 的菜单栏中,您将在菜单栏的右侧位置看到新的菜单和菜单项以及 myicon.gif

  2. 选择该菜单项以调用 OpenAnagramAction.java 中的 performAction 方法。您将看到在“explorer”模式下嵌入的 Anagrams 示例:

创建可共享的二进制文件

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

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

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

卸载模块

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

下一步

有关更高级的教程,请参见以下资源:

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

版本控制

版本
日期
更改
1 2005 年 6 月 30 日 初始版本
2 2005 年 7 月 7 日
  • 添加了源代码和介绍如何下载和安装插件的介绍性部分。
  • 添加了原始版本和组件版本的 Anagrams.java 文件之间的区别列表。
  • 添加了关于使用 IDE 来区分原始版本和组件版本的 Anagrams.java 文件的说明。
  • 更正了 Action 类所需的 import 语句的列表。
  • Bundle.properties 中添加了菜单和菜单项的本地化。
  • 在菜单栏中显示菜单序列。
  • 更改了最后两个屏幕截图以显示本地化、序列和 explorer 模式。
  • 添加了新部分:“以不同的模式停靠 NetBeans 插件模块”和“创建可共享的插件二进制文件”
  • 更正了对复制/粘贴错误 org.myorg.myfirstmodule 的一个错误参考。
3 2005 年 7 月 11 日
  • “实现组件”部分的第一步中,在句子中添加了“AnagramPlugin”,以便用户更容易找到 com.toy.anagrams package
  • “AnagramProject”的两个实例更改为“AnagramPlugin”。
  • 添加了“leftSlidingSide”和“rightSlidingSide”模式。
4 2005 年 9 月 30 日
  • 由于 Window Component 向导的原因,全部进行了重新编写和彻底简化。

事件编号 描述 状态
1 代码和教程本身需要检查。 有待解决。
2 P1。在 New File 向导的 J2SE 示例类别中添加了有关组件版本的 anagrams.java 和原始版本之间的区别的解释。 有待解决。
3 P1。需要提供有关 topcomponent 的更多信息。模式、.wstcref.settings 文件根本没有提到,需要添加。还需要解释“Serializable”。还需要添加有关“什么是模式?”、“什么是组件?”(可能还需要添加“什么是组?”)的信息。常见问题解答的链接。 有待解决。
4 P2。添加有关创建后任务部分:
  • 放在不同模式中。
  • 在 layer.xml 中其他位置的序列操作
有待解决。
5 P2。使用 TODO 窗口查找一些评论并添加一些代码。 有待解决。




↑返回目录
前一篇: NetBeans Editor Extension 模块教程
后一篇: NetBeans File Template 模块教程