当前页面: 开发资料首页 → 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(下载)
安装示例
采用以下步骤来安装示例:
- 解压缩附加的文件。
- 在 IDE 中,选择 File > Open Project,然后浏览到包含已解压缩文件的文件夹。打开模块项目。其形式如下:
- 右键单击项目节点并在 Target Platform 中选择 Install/Reload。将打开目标平台并安装该模块。
介绍示例
- 打开 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(取决于您的配置)。
- 使用示例:
- 显示属性表。 右键单击子节点并选择 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 提供一个向导,用于设置模块所需的所有基本文件。
创建模块项目
- 选择 File > New Project。在 Categories 下,选择 NetBeans Plug-in Modules。在 Projects 下,选择 Module Project 并单击 Next。
- 在 Name and Location 面板中,在 Project Name 中键入 System Properties。将 Project Location 更改为您计算机上的任何目录,如 c:\mymodules。选中 Standalone Module 单选按钮。选中 Set as Main Project 复选框。单击 Next。
- 在 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 对话框来执行此操作。
- 在 Projects 窗口中,右键单击 System Properties 项目,然后选择 Properties。在 Project Properties 对话框中,单击 Libraries,然后单击 Add...。现在应该看到下图:
- 对于以下每个 API,在 Libraries 面板中,单击“Add...”,从 Module 列表中选择名称,然后单击 OK 确认:
- 单击 OK,退出 Project Properties 对话框。
- 在 Projects 窗口中,双击 Project Metadata 并注意您选择的 API 是否声明为模块依存关系:
创建主文件
模块的 meat 由它的 Java 类提供。在本部分中您将创建并检查它们:
AllPropsNode.java
执行以下操作:
- 创建文件。右键单击 org.myorg.systemproperties 节点,然后选择 New > File/Folder。在 Categories 下选择 Java Classes。在 File Types 下,选择 Java Class。单击 Next 并在 Class Name 中键入 AllPropsNode。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
- 理解文件。 该 Java 类指定主节点下的子节点,并要求使用 AllPropsChildren 来跟踪子节点的列表。该模块非常注意这些事项,如它的上下文菜单。
下面是该类的解释:
- public class AllPropsNode extends AbstractNode。AbstractNode 是一个普通的 Node 子类。节点是抽象类,AbstractNode 是可以自定义的普通实现。
- private static ResourceBundle bundle = NbBundle.getBundle(AllPropsNode.class)。为该类的所有本地化文本加载 Bundle.properties 文件。该类的其余部分使用变量包获得所有本地化的文本。注意其他类的功能相似。
- 构造方法:
- public AllPropsNode。在创建该代码时,它首先调用超类 -- 即 超类 (AbstractNode) 的构造方法。这会增加 AbstractNode 的基础架构,并显示必须提供子对象以便使用。该对象代表节点的子对象列表,为了更清晰创建一个单独的类:AllPropsChildren。
- 方法:
PropertiesNotifier.java
执行以下操作:
- 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 PropertiesNotifier。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
- 理解文件。 在有更改(包括添加、删除或重命名属性)时或属性值更改时该 Java 类管理路由事件。您还可以将其视为帮助程序例程,非常类似于具有附带事件集的 JavaBeans 组件。但是,它不是严格的 JavaBeans 组件,该类没有实例,但是使用它的静态方法和 JavaBeans 实例方法一样。
为该类定义的方法如下:
- changed。对正在侦听的进程激发一个事件。显示基于系统属性的信息的每个组件必须侦听这些事件,并根据需要更新它们的显示。
- addChangeListener 和 removeChangeListener。让组件将它们自己注册为这些事件的侦听器。具有显示状态的进程可以向该类添加 ChangeListener。为了确保正确更新,影响状态的进程调用 changed。
AllPropsChildren.java
执行以下操作:
- 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 AllPropsChildren。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
- 理解文件。该 Java 类负责跟踪 System Properties 节点下的节点列表。当第一次询问该列表时,它检索所有系统属性并让该节点实现来跟踪所有系统属性名称。执行此操作的抽象类名为 Children。
在本示例中,使用名为 Children.Keys 的常用子实现。通过将 Children.Keys 设为子类,您不需要显式跟踪节点,该实现可以执行该操作。相反,您跟踪键集,它是较轻量级的对象。通常每个键代表一个节点。您必须告诉实现如何为每个键创建一个节点。您可以自己决定使用什么类型的键。
在本示例中,键是系统属性的名称。
实现 Children.Keys 时应该定义的重要方法包括:
- addNotify。平台第一次需要节点列表时调用。比如当展开 System Properties 节点时。调用 addNotify 时,它调用帮助程序方法 refreshList 来确定键,然后它使用 PropertiesNotifier 注册自己,要求通知任何系统属性的更改。如果存在这样的更改,则将刷新该列表。
- removeNotify。当用户折叠 System Properties 节点并开始在其他节点上工作时调用。平台将注意到不再需要节点列表,并且它将释放不再使用的内存。注意到即刻折叠节点将不会触发该调用。调用 removeNotify 时,它移除侦听器,因为它不再对接收通知感兴趣。此外,用空的设置调用 setKeys。Children.Keys 定义了该方法以供子类使用。
- createNodes。需要构造子节点时由实现调用。它被传递给正在生成节点的键。根据键显示的内容,它可能不返回节点、返回一个节点或返回多个节点。在本示例中,将创建一个属性节点的新实例,并且将系统属性名称传递到它的构造方法中。
- refreshList。System.getProperties 调用检索系统中当前定义的所有属性。该调用遍历所有属性名称,保留并对该列表进行排序。与该列表一起调用 setKeys,使子节点出现,每个系统属性一个(按照属性名称排序)。
OnePropNode.java
执行以下操作:
- 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 OnePropNode。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
- 理解文件。 该 Java 类为单个属性提供 AbstractNode 实现。它的构造方法要求一个字符串键。该类显示一个系统属性名称。当用户展开系统属性节点时,它构建键的列表,然后创建相应数量的 OnePropNodes。每个 OnePropNode 显示一个键,但不与它的父节点直接进行交互,它的知识仅限于单个系统属性和如何处理它,以及在有更改时通知 PropertiesNotifier。这种设计更容易重新使用此类节点,包括将它们放置在其他上下文中。
下面是该类的解释:
- public class OnePropNode extends AbstractNode。AbstractNode 是一个普通的 Node 子类。节点是抽象类,AbstractNode 是可以自定义的普通实现。
- private static ResourceBundle bundle = NbBundle.getBundle(AllPropsNode.class)。为该类的所有本地化文本加载 Bundle.properties 文件。该类的其余部分使用变量包获得所有本地化的文本。
- 构造方法:
- 方法:
RefreshPropsAction.java
执行以下操作:
- 创建文件。 右键单击 org.myorg.systemproperties 节点,选择 New > Java Class,并在 Class Name 中键入 RefreshPropsAction。单击 Finish。新 Java 类将在 Source Editor 中打开。用此处的代码替换默认代码。
- 理解文件。 该 Java 类提供当用户选择 Refresh 时在 System Properties 下的弹出菜单中出现的操作。它强制进行刷新,基于系统属性的最新状态更新信息显示。它是 CallableSystemAction 并且始终启用,但是对选择的内容不敏感。原则上,可以将其放置在工具栏(但是由于它对用户不那么重要,因此这里将它保留在此处的弹出菜单中)上。
实现 CallableSystemAction 时应该定义的重要方法包括:
设置支持文件
已经编写了主文件的代码之后,您必须指定模块影响文件系统的方式以及您想向用户显示的标签和文本。layer.xml 文件和 Bundle.properties 文件正是用于这个目的的。
在 Runtime 窗口中注册节点
- 在 layer.xml 文件中的 标记之间添加以下条目:
<folder name="UI">
<folder name="Runtime">
<file name="org.myorg.systemproperties.AllPropsNode.instance" />
</folder>
</folder>
- 保存文件。
本地化模块
- 将以下属性添加到 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
- 保存文件。
获得图标
您可以使用任何所需的 16x16 图标,只要它们命名为 allPropsIcon.gif 和 onePropIcon.gif 即可。或者,从本教程附带的 ZIP 文件中获得图标。注意,AllPropsNode.java 和 OnePropNode.java构造方法中的 setIconBase 语句设置图标的位置。
构建和安装模块
IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。
安装 NetBeans 模块
使用 NetBeans 模块
- 在 IDE 的 Runtime 窗口 (Ctrl-5) 中,您应该看到新节点及其很多子节点:
- 按照介绍示例所述使用模块。
下一步
有关创建和开发 NetBeans 模块的更多信息,请参见以下资源: