logo

当前栏目:社区首页->软件开发->Java 转到:在该栏目发表文章社区后台管理搜索
NetBeans Anagram Game 模块教程
作者: keven 日期: 08-04-04, 00:27
摘要: NetBeans Anagram Game 模块教程 反馈 本教程演示 NetBeans Windows API 的各个方面。它介绍如何在 IDE 中通过顶部组件停靠或嵌入 NetBeans Anag... NetBeans Anagram Game 模块教程

MegaEntry 网络社区与信息交流平台!

反馈

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

本教程将介绍以下主题:

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

有关使用 NetBeans 插件模块的详细信息,请参阅 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. 选择新菜单。打开 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 像素图像文件,例如,在以下位置:

    enterprise2jakarta-tomcat-5.5.7serverwebappsadminimages.

    对于本教程,只使用上面目录中的 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 窗口查找一些评论并添加一些代码。 有待解决。



上一篇:Profiler 屏幕截图下一篇:NetBeans Editor Extension 模块教程

回复
标题: 

强烈建议采用IE 6.0或以上的浏览器