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

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

NetBeans System Properties 模块教程

摘要: NetBeans System Properties 模块教程 反馈 本教程主要是为了演示 NetBeans Node API 的各个方面。它介绍如何实现以下内容: 如何添加、重命名和删除节点 如何显...
NetBeans System Properties 模块教程

反馈

本教程主要是为了演示 NetBeans Node API 的各个方面。它介绍如何实现以下内容:

由于 NetBeans Node API 是最普遍的 API 之一,并且反应了存在节点依存关系的信息,因此,本示例很重要。您通过该实时信息的界面进行交互。

本教程将介绍以下主题:

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

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


了解示例

开始编写插件模块之前,必须确保您具备所有必要的软件。此外,您可能想在亲自构建之前使用示例。了解示例介绍在本教程的其余部分您所要做的事项。

安装软件

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

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

安装示例

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

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

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

介绍示例

  1. 打开 Runtime 窗口 (Ctrl-5),注意到您拥有一个具有很多(大约 50 个)子节点的新节点,每个子节点都根据特定 Java 属性进行了标记。当您右键单击主节点和子节点时,将出现上下文菜单项:

    对于子节点,Java 运行时的一般属性用于配置基本机理,如搜索字体的路径、Java 虚拟机 (JVM) 的位置、默认语言环境等等。通常是字符串键,类似于 name.name.name 以及关联的字符串值。可以从 Java 语言中查询或设置这些值。此外,可以使用它们设置 JVM 启动时的默认值。当展开 System Properties 节点时,每个键对应显示一个节点,而根据每个键对每个节点都进行了标记。例如:

    • 例如,值 java.vm.vendor 可能显示 Sun Microsystems, Inc.。
    • path.separator 可能显示分号(取决于您的配置)。
    • user.language 可能显示值 English(取决于您的配置)。
  2. 使用示例:
    • 显示属性表。 右键单击子节点并选择 Properties。显示属性表和一个包含两个属性的 Properties 选项卡。第一个属性标签为 Name,它提供与该节点(键)相同的名称;另一个属性标签为 Value,显示属性的字符串值。
    • 重命名属性。 单击子节点,然后再次单击它。这样您可以在合适的位置重命名键,从而保持相同的值。也可以单击属性表中的 Name 属性或者右键单击子节点并选择 Rename。
    • 更改值。 单击属性表中的 Value 选项卡并键入新的值。这会将系统属性重置为所输入的值。
    • 添加属性。右键单击主 System Properties 节点,然后选择 Add System Property。这样能向列表中添加新系统属性。
    • 删除属性。 选择属性并按 Delete。这样将移除该属性。
    • 刷新列表。右键单击 System Properties 节点,然后选择 Refresh。这会提示该模块重新检查值,并根据需要刷新列表。

介绍源

System Properties 示例由主文件和支持文件组成。

  • 主文件。 该模块的主文件是 Java 类(在下图中选中的类):

    下面按照字母顺序介绍 Java 类:

    文件
    描述
    AllPropsChildren.java 该子对象负责跟踪 System Properties 节点下的节点列表。当第一次询问该列表时,它检索所有系统属性并让该节点实现来跟踪所有系统属性名称。执行此操作的接口是名为 Children 的类。
    AllPropsNode.java 该节点指定它下面的子节点,并要求使用 AllPropsChildren 来跟踪子节点的列表。该模块非常注意这些事项,如它的上下文菜单
    OnePropNode.java 这是代表单个属性的节点,它是 AbstractNode。它的构造方法要求用户以字符串的形式提供键。对于每个系统属性名称,使用 OnePropNode 来显示。当用户展开系统属性节点时,它构建键的列表,然后创建相应数量的 OnePropNodes。每个 OnePropNode 显示一个键,不直接与它的父节点交互 -- 它的知识仅限于单个系统属性和如何处理它,以及在有更改时通知 PropertiesNotifier。这种设计更容易重新使用此类节点,包括将它们放置在其他上下文中。
    PropertiesNotifier.java 在有更改(包括添加、删除或重命名属性)时或属性值更改时管理路由事件。
    RefreshPropsAction.java 该操作出现在 System Properties 下的弹出菜单中,标签为 Refresh。它强制进行刷新,基于系统属性的最新状态更新信息显示。

  • 支持文件。 该模块的支持文件位于 org.myorg.systemproperties 包以及 Important Files 节点(在下图中选中的节点)中:

    下面按照字母顺序介绍 org.myorg.systemproperties 包中的支持文件:

    文件
    描述
    allPropsIcon.gif System Properties 节点的图标。
    Bundle.properties 这是标准 Java 属性文件,它使用语法 Key=Value。键是出现在源代码中内容的代码名称,它的值表示将向用户显示的内容。该文件对于本地化特别有用。例如,通过创建 Bundle_ja.properties 之类的属性文件并用日语填写所有值,该模块在用户以日语模式运行 IDE 时将自动用日语显示所有内容。
    layer.xml 在 Runtime 窗口中将 AllPropsNode.java 注册为一个节点。
    onePropIcon.gif 子节点的图标。

    按照文件出现在 Projects 窗口中的顺序介绍 Important Files 节点中的文件:

    文件
    描述
    模块清单(Module Manifest) 将项目声明为模块。
    构建脚本 包含 Ant 目标,用于构建项目。
    项目元数据 包含项目元数据,如项目的依存关系。
    项目属性 包含项目属性。
    NetBeans Platform 配置 包含平台属性。
    每用户 NetBeans Platform 配置 包含特定用户的属性。

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


设置模块项目

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

创建模块项目

  1. 选择 File > New Project。在 Categories 下,选择 NetBeans Plug-in Modules。在 Projects 下,选择 Module Project 并单击 Next。
  2. 在 Name and Location 面板中,在 Project Name 中键入 System Properties。将 Project Location 更改为您计算机上的任何目录,如 c:\mymodules。选中 Standalone Module 单选按钮。选中 Set as Main Project 复选框。单击 Next。
  3. 在 Basic Module Configuration 面板中,用 myorg 替换 Code Name Base 中的 yourorghere 并将“System Properties”更改为“systemproperties”,从而整个 Code Name Base 为 org.myorg.manifestfiletype。在 Module Display Name 中填入 System Properties。留出本地化包和 XML 层的位置,以便它们存储在名为 org.myorg.systemproperties 的包中。单击 Finish。

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

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

指定模块的依存关系

您需要将几个属于 NetBeans API 的类设为子类。每个类都将被声明为 Module 依存关系。使用 Project Properties 对话框来执行此操作。

  1. 在 Projects 窗口中,右键单击 System Properties 项目,然后选择 Properties。在 Project Properties 对话框中,单击 Libraries,然后单击 Add...。现在应该看到下图:

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

创建主文件

模块的 meat 由它的 Java 类提供。在本部分中您将创建并检查它们:

AllPropsNode.java

执行以下操作:

  1. 创建文件。右键单击 org.myorg.systemproperties 节点,然后选择 New > File/Folder。在 Categories 下选择 Java Classes。在 File Types 下,选择 Java Class。单击 Next 并在 Class Name 中键入 AllPropsNode。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
  2. 理解文件。 该 Java 类指定主节点下的子节点,并要求使用 AllPropsChildren 来跟踪子节点的列表。该模块非常注意这些事项,如它的上下文菜单。

    下面是该类的解释:

    • public class AllPropsNode extends AbstractNodeAbstractNode 是一个普通的 Node 子类。节点是抽象类,AbstractNode 是可以自定义的普通实现。
    • private static ResourceBundle bundle = NbBundle.getBundle(AllPropsNode.class)为该类的所有本地化文本加载 Bundle.properties 文件。该类的其余部分使用变量包获得所有本地化的文本。注意其他类的功能相似。
    • 构造方法:
      • public AllPropsNode在创建该代码时,它首先调用超类 -- 即 超类 (AbstractNode) 的构造方法。这会增加 AbstractNode 的基础架构,并显示必须提供子对象以便使用。该对象代表节点的子对象列表,为了更清晰创建一个单独的类:AllPropsChildren。
        • setIconBase指定关联图标的位置。
        • setName设置内部名称。这通常是随意的,但是理想情况下应该在成员中是唯一的。
        • setDisplayName设置显示给用户的名称。它默认为内部名称,但是最好将其设置为已本地化的内容。
        • setShortDescription设置关联的工具提示。这是一个重写的方法,指定将放入节点上下文菜单的内容。
    • 方法:
      • getActions以下是将在菜单中显示的操作列表,在菜单项之间用分隔符进行分隔。使用以下方法:
        • RefreshPropsAction 是在另一个源文件中定义的操作
        • NewAction 能够创建新的子节点或键值对
        • OpenLocalExplorerAction 允许用户使新的 Explorer 窗口只显示系统属性

        ToolsActionPropertiesAction 都是大多数节点应该具有的标准操作。

      • getHelpCtx为上下文帮助提供 IDE 键。当为该模块构建上下文帮助时,使用该方法将特定节点与特定帮助字符串关联。
      • cloneNode创建节点的一个新副本,它使 IDE 的其他部分显示 System Properties 列表的单独副本,而不是 Runtime 选项卡。这比后退实现更高效,它是要代表原始节点。
      • getNewTypes返回 NewType 对象的列表。当上下文菜单中存在 NewAction 时,该操作显示该节点中与每个 NewTypes 对应的菜单项。该操作提供实际的 GUI,如显示子菜单。您指定抽象的定义并生成新对象。在本例中,只返回一个 NewType,因为只有一个合理创建的类型(新系统属性);但是可以返回多个 NewType,它们将显示在子菜单中。该方法之后是菜单项上的名称定义(如 New System Property)和帮助上下文。
        • create创建新对象。在本例中,将有 key-in 值的对话框。
          • NotifyDescriptor.InputLine一个小对话框的描述,具有单个文本条目弹出菜单、对话框的标题和一条消息。
          • DialogDisplayer.getDefault().notify(desc)将全部内容显示在弹出对话框中。
          • getInputText检索键的用户输入。

            再次使用 DialogDisplayer.getDefaultgetInputText 对值执行相同的操作。

            接下来从 Java API 中调用 System.setProperty 设置系统属性。

            最后,调用另一个类 PropertiesNotifier.changed(下一步所创建的类)指示其他类和 Module 组件当前系统属性的设置已经更改并且需要更新。例如,可能有一个新属性或者一个现有值已经更改。

PropertiesNotifier.java

执行以下操作:

  1. 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 PropertiesNotifier。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
  2. 理解文件。 在有更改(包括添加、删除或重命名属性)时或属性值更改时该 Java 类管理路由事件。您还可以将其视为帮助程序例程,非常类似于具有附带事件集的 JavaBeans 组件。但是,它不是严格的 JavaBeans 组件,该类没有实例,但是使用它的静态方法和 JavaBeans 实例方法一样。

    为该类定义的方法如下:

    • changed对正在侦听的进程激发一个事件。显示基于系统属性的信息的每个组件必须侦听这些事件,并根据需要更新它们的显示。
    • addChangeListenerremoveChangeListener让组件将它们自己注册为这些事件的侦听器。具有显示状态的进程可以向该类添加 ChangeListener。为了确保正确更新,影响状态的进程调用 changed

AllPropsChildren.java

执行以下操作:

  1. 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 AllPropsChildren。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
  2. 理解文件。该 Java 类负责跟踪 System Properties 节点下的节点列表。当第一次询问该列表时,它检索所有系统属性并让该节点实现来跟踪所有系统属性名称。执行此操作的抽象类名为 Children

    在本示例中,使用名为 Children.Keys 的常用子实现。通过将 Children.Keys 设为子类,您不需要显式跟踪节点,该实现可以执行该操作。相反,您跟踪键集,它是较轻量级的对象。通常每个键代表一个节点。您必须告诉实现如何为每个键创建一个节点。您可以自己决定使用什么类型的键。

    在本示例中,键是系统属性的名称。

    实现 Children.Keys 时应该定义的重要方法包括:

    • addNotify平台第一次需要节点列表时调用。比如当展开 System Properties 节点时。调用 addNotify 时,它调用帮助程序方法 refreshList 来确定键,然后它使用 PropertiesNotifier 注册自己,要求通知任何系统属性的更改。如果存在这样的更改,则将刷新该列表。
    • removeNotify当用户折叠 System Properties 节点并开始在其他节点上工作时调用。平台将注意到不再需要节点列表,并且它将释放不再使用的内存。注意到即刻折叠节点将不会触发该调用。调用 removeNotify 时,它移除侦听器,因为它不再对接收通知感兴趣。此外,用空的设置调用 setKeysChildren.Keys 定义了该方法以供子类使用。
    • createNodes需要构造子节点时由实现调用。它被传递给正在生成节点的键。根据键显示的内容,它可能不返回节点、返回一个节点或返回多个节点。在本示例中,将创建一个属性节点的新实例,并且将系统属性名称传递到它的构造方法中。
    • refreshListSystem.getProperties 调用检索系统中当前定义的所有属性。该调用遍历所有属性名称,保留并对该列表进行排序。与该列表一起调用 setKeys,使子节点出现,每个系统属性一个(按照属性名称排序)。

OnePropNode.java

执行以下操作:

  1. 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 OnePropNode。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
  2. 理解文件。 该 Java 类为单个属性提供 AbstractNode 实现。它的构造方法要求一个字符串键。该类显示一个系统属性名称。当用户展开系统属性节点时,它构建键的列表,然后创建相应数量的 OnePropNodes。每个 OnePropNode 显示一个键,但不与它的父节点直接进行交互,它的知识仅限于单个系统属性和如何处理它,以及在有更改时通知 PropertiesNotifier。这种设计更容易重新使用此类节点,包括将它们放置在其他上下文中。

    下面是该类的解释:

    1. public class OnePropNode extends AbstractNodeAbstractNode 是一个普通的 Node 子类。节点是抽象类,AbstractNode 是可以自定义的普通实现。
    2. private static ResourceBundle bundle = NbBundle.getBundle(AllPropsNode.class)为该类的所有本地化文本加载 Bundle.properties 文件。该类的其余部分使用变量包获得所有本地化的文本。
    3. 构造方法:
      • super(Children.LEAF)告诉节点的层次这是一个将不需要扩展并且没有任何子节点的叶节点。然后它存储键并设置图标。

      • setDefaultAction设置如果双击该节点或执行类似用户操作时默认情况下运行的操作。在本示例中,默认的操作是弹出属性表。
      • super.setName(key)设置键的名称。使用继承的版本设置节点名称(它不会重命名实际的属性)。
      • setShortDescription设置关联的工具提示。这是一个重写的方法,指定将放入节点上下文菜单的内容。
    4. 方法:
      • createSheet配置属性表的外观。这将在属性表中创建选项卡列表以及属性列表。在需要显示属性列表前不会调用 createSheet
        • super.createSheet确保存在一个要启动的表。
        • sheet.get (Sheet.PROPERTIES)检查是否有名为 Properties 的选项卡。如果没有,Sheet.createPropertiesSet 生成一个。注意,Sheet 是指节点的整个属性列表,并且 Sheet.Set 是属性表中的一个选项卡。
        • PropertySupport.Name创建反映节点名称的 Name 属性。代码已经将节点名称与系统属性名称同步。
        • ValueProp是一个内部类,为本示例创建的自定义属性。PropertySupport.ReadWrite 是用于输入和查看值的基本类。超调用为用户提供属性的代码名称、显示名称以及工具提示。
          • getValue查看系统属性。
          • setValue为系统属性设置新值并通知其他值已更改的进程。

        向属性表添加属性以及 ChangeListener,它侦听系统属性中的更改,这意味着该特定属性已更改。如果正确,则 firePropertyChange 节点将激发一个更改,指示它的属性表中的某个属性不再有效,检查并进行相应地更新。注意,属性的名称为 value,它与创建 ValueProp 时指定的内部名称相匹配。

      • finalize该类被破坏时调用,只要节点被破坏就移除 ChangeListener
      • canRename返回 true,允许重命名节点。
      • setName重命名节点时调用,如从重命名操作、从 Explorer 或从属性表的 Name 属性中进行重命名时。该操作检索所有系统属性以及关联的值,移除键、添加具有新名称和值的新属性,并设置系统属性。该操作还通知所有已更改的相关属性,但是它不直接重命名自身(参见 AllPropsChildren)。
      • canDestroy提供删除该节点的权限。
      • destroy检索系统属性,移除它的键,设置回属性并通知所有相关的更改。注意,该 destroy 方法并不移除节点,它只移除系统属性并通知感兴趣的各方该属性已移除。实际上该节点随后被 AllPropsChildren 移除。AllPropsChildren 意识到该属性不再存在,并且创建不再包括该属性的一组新键。然后 Children.Keys 实现自动移除该节点。执行该操作以反映系统的实际状态。

    RefreshPropsAction.java

    执行以下操作:

    1. 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 RefreshPropsAction。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
    2. 理解文件。 该 Java 类提供当用户选择 Refresh 时在 System Properties 下的弹出菜单中出现的操作。它强制进行刷新,基于系统属性的最新状态更新信息显示。它是 CallableSystemAction 并且始终启用,但是对选择的内容不敏感。原则上,可以将其放置在工具栏(但是由于它对用户不那么重要,因此这里将它保留在此处的弹出菜单中)上。

      实现 CallableSystemAction 时应该定义的重要方法包括:

      • performAction调用 PropertiesNotifier.changed 指示其他类和 Module 组件当前系统属性的设置已经更改并且需要更新。例如,可能已经添加了一个新属性或者已经更改了一个现有值。
      • getNameBundle.properties 中获得操作标签的名称
      • getHelpCtx为上下文帮助提供 IDE 键。当为该模块构建上下文帮助时,使用该方法将特定节点与特定帮助字符串关联。

      设置支持文件

      已经编写了主文件的代码之后,您必须指定模块影响文件系统的方式以及您想向用户显示的标签和文本。layer.xml 文件和 Bundle.properties 文件正是用于这个目的的。

      在 Runtime 窗口中注册节点

      1. layer.xml 文件中的 标记之间添加以下条目:
        <folder name="UI">
          <folder name="Runtime">
             <file name="org.myorg.systemproperties.AllPropsNode.instance" />    
          </folder>
        </folder>
      2. 保存文件。

      本地化模块

      1. 将以下属性添加到 Bundle.properties 文件:
        LBL_AllPropsNode=System Properties
        HINT_AllPropsNode=Shows all currently set system properties.
        LBL_NewProp=System Property
        LBL_NewProp_dialog=Create New Property
        MSG_NewProp_dialog_key=New property name:
        MSG_NewProp_dialog_value=New property value:
        HINT_OnePropNode=Represents one system property.
        PROP_value=Value
        HINT_value=Value of this system property.
        LBL_RefreshProps=Refresh
        LBL_MyOwnActionProps=My Own Action
      2. 保存文件。

      获得图标

      您可以使用任何所需的 16x16 图标,只要它们命名为 allPropsIcon.gifonePropIcon.gif 即可。或者,从本教程附带的 ZIP 文件中获得图标。注意,AllPropsNode.javaOnePropNode.java构造方法中的 setIconBase 语句设置图标的位置。


      构建和安装模块

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

      安装 NetBeans 模块

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

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

      使用 NetBeans 模块

      1. 在 IDE 的 Runtime 窗口 (Ctrl-5) 中,您应该看到新节点及其很多子节点:

      2. 按照介绍示例所述使用模块。

      下一步

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





↑返回目录
前一篇: NetBeans Component Palette 模块教程
后一篇: NetBeans Options Window Extension 模块教程