当前页面: 开发资料首页 → Netbeans 专题 → NetBeans Options Window Extension 模块教程
摘要: NetBeans Options Window Extension 模块教程 反馈 本教程向您介绍如何通过向 Options 窗口添加新类别来扩展 IDE。向您演示如何向 Miscellaneous ...
本教程向您介绍如何通过向 Options 窗口添加新类别来扩展 IDE。向您演示如何向 Miscellaneous 面板(如左下角的屏幕截图所示)添加新类别,以及如何将新类别放置在全新的面板中(如右下屏幕截图所示):
要扩展 Fonts & Colors 面板,请参阅 NetBeans Manifest File Syntax Highlighting 模块教程。
本教程将介绍以下主题:
有关创建 NetBeans 插件模块的更多信息,请参见 NetBeans 网站上的 NetBeans Development Project 主页。如果有问题,请访问 NetBeans Developer FAQ 或使用本页顶部的反馈链接。
开始编写插件模块之前,必须确保您具备所有必要的软件。此外,您可能想在亲自构建之前使用示例。
开始之前,需要在您的计算机上安装以下软件:
采用以下步骤来安装示例:
现在您了解了 NetBeans Options Window Extension Module 的用户界面,让我们从头开始创建该模块。
开始编写模块前,必须确保正确地设置了项目。
当您使 IDE 的源可用于 NetBeans Platform Manager 时,您可以从 Source Editor 中访问 IDE 的源文件和 Javadoc。这样便简化了插件模块的开发,原因是它使您能够非常快速地查找有关执行的类和方法的信息。整个教程中都提到源和 Javadoc,因此应该在进行下一步前先获得它们。
IDE 创建 MyFirstOption 项目。该项目包含所有资源和项目元数据,如该项目的 Ant 构建脚本。该项目在 IDE 中打开。您可以在 Projects 窗口 (Ctrl-1) 中查看其逻辑结构,在 Files 窗口 (Ctrl-2) 中查看其文件结构。
您需要子类化三个属于 NetBeans API 的类。每个类都将被声明为 Module 依存关系。使用 Project Properties 对话框来执行此操作。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://www.netbeans.org/ns/project/1"> <type>org.netbeans.modules.apisupport.project</type> <configuration> <data xmlns="http://www.netbeans.org/ns/nb-module-project/2"> <code-name-base>org.myorg.myfirstoption</code-name-base> <standalone/> <module-dependencies> <dependency> <code-name-base>org.jdesktop.layout</code-name-base> <build-prerequisite/> <compile-dependency/> <run-dependency> <release-version>1</release-version> <specification-version>1.2</specification-version> </run-dependency> </dependency> <dependency> <code-name-base>org.netbeans.modules.options.api</code-name-base> <build-prerequisite/> <compile-dependency/> <run-dependency> <release-version>0</release-version> <specification-version>1.1</specification-version> </run-dependency> </dependency> <dependency> <code-name-base>org.openide.util</code-name-base> <build-prerequisite/> <compile-dependency/> <run-dependency> <specification-version>6.5</specification-version> </run-dependency> </dependency> </module-dependencies> <public-packages/> </data> </configuration> </project>
您需要创建三个类:
要创建以上类,请按照下面部分中的步骤执行操作。
执行以下操作:
您已拥有用户界面,现在让我们在 Options 窗口中创建一个类别。
在 Options 窗口中,类别由 PanelController 组成,它提供 JPanel 和有关 JPanel 如何与 Options 窗口交互的信息以及以下组合之一(取决于放置类别的位置):
下面演示两个方案。
执行以下操作:
package org.myorg.myfirstoptioncategory; import org.netbeans.spi.options.AdvancedOption; import org.netbeans.spi.options.OptionsCategory; import org.netbeans.spi.options.OptionsCategory.PanelController; import org.openide.util.NbBundle; public final class MyFirstOptionCategory extends OptionsCategory { public String getIconBase () { return "org/netbeans/modules/options/resources/generalOptions"; } public String getCategoryName () { return loc ("CTL_Example_Category_Name"); } public String getTitle () { return loc ("CTL_Example_Title"); } public PanelController create () { return new MyFirstOptionPanelController (); } private static String loc (String key) { return NbBundle.getMessage (MyFirstOptionCategory.class, key); } }
单击该链接。OptionsCategory 类在 Source Editor 中打开。熟悉一下源文件并理解它如何与 MyFirstOptionCategory 实现相关。
public String getDisplayName() { return loc ("CTL_Example_Title"); } public String getTooltip() { return loc ("CTL_Example_Title"); }
注意,AdvancedOption 并不使用方法 getIconBase()、getCategoryName() 和 getTitle()。因此,您可以从 MyFirstOptionCategory.java 将它们删除。
接下来,按下 Ctrl 键,将鼠标移动到 AdvancedOption 标识符上,并注意到出现一个超链接:
单击该链接。AdvancedOption 类在 Source Editor 中打开。熟悉一下源文件并理解它如何与 MyFirstOptionCategory 实现相关。
现在您已拥有面板和类别,您需要提供有关如何让它们与 Options 窗口交互的信息。在扩展 PanelController 的类中定义类别和 Options 窗口之间的交互。例如,当用户单击 Options 窗口中的 OK 按钮时,则调用 applyChanges() 方法。当单击 Cancel 按钮时,则调用 cancel() 方法。由于您没有在 MyFirstOptionPanel 中定义任何有意义的选项,因此,以下 PanelControler 实现非常简单。
执行以下操作:
package org.myorg.myfirstoptioncategory; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.JComponent; import org.netbeans.spi.options.OptionsCategory.PanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; public final class MyFirstOptionPanelController extends PanelController { private MyFirstOptionPanel examplePanel; private boolean changed = false; public MyFirstOptionPanelController () { examplePanel = new MyFirstOptionPanel (); } public void update () { // init values in your panel here } public void applyChanges () { // this method is called when OK button has been pressed // save values here } public void cancel () { // this method is called when Cancel button has been pressed // revert any possible changes here } public boolean isValid () { return true; } public boolean isChanged () { return changed; } public HelpCtx getHelpCtx () { return new HelpCtx ("netbeans.optionsDialog.editor.example"); } public JComponent getComponent (Lookup masterLookup) { return examplePanel; } public void addPropertyChangeListener(PropertyChangeListener l) { } public void removePropertyChangeListener(PropertyChangeListener l) { } }
单击该链接。OptionsCategory.PanelController 类在 Source Editor 中打开。熟悉一下源文件并理解它如何与其 PluginsFactory 实现相关。
此时,Projects 窗口应该如下所示:
IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。
要在 Options 窗口中注册模块,您必须在 layer.xml 文件中执行以下操作:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd"> <filesystem> <folder name="OptionsDialog"> <folder name="Advanced"> <file name="Example.instance"> <attr name="instanceClass" stringvalue="org.myorg.myfirstoptioncategory.MyFirstOptionCategory"/> </file> </folder> </folder> </filesystem>
注意: 在上面的方案中,MyFirstOptionCategory 必须扩展 AdvancedOption。
要将类别注册为新面板,请向 layer.xml 文件中添加以下条目,而不是以上条目:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd"> <filesystem> <folder name="OptionsDialog"> <attr name="Keymaps.instance/Example.instance" boolvalue="true" /> <file name="Example.instance"> <attr name="instanceClass" stringvalue="org.myorg.myfirstoptioncategory.MyFirstOptionCategory"/> </file> <attr name="Example.instance/Advanced.instance" boolvalue="true" /> </folder> </filesystem>
注意: 在上面的方案中,MyFirstOptionCategory 必须扩展 OptionsCategory。
OpenIDE-Module-Name=MyFirstOptionCategory OpenIDE-Module-Display-Category=Tools CTL_Example_Category_Name=M&y First Option Category CTL_Example_Title=My First Option Category
IDE 使用 Ant 构建脚本来构建和安装您的模块。构建脚本是创建模块项目时为您创建的。
模块即在目标平台中构建和安装。目标平台打开,您可以试用新的模块。默认目标平台是由开发 IDE 的当前实例使用的安装。
NBM 文件是一个 NetBeans 模块,该模块已被打包以便通过 Web 发送。NBM 文件和模块 JAR 文件之间的主要差别为:
NBM 文件只是具有特殊扩展名的 ZIP 文件。它们使用 JDK 机理给 JAR 文件签名。除非您正在执行一些不同寻常的操作,否则不需要担心 NBM 文件的内容,只需让 NBM 创建的标准 Ant 构建脚本为您完成所有工作。IDE 根据在 Project Properties 对话框的项目中输入的选项生成构建脚本。您可以在 Project Properties 对话框中设置模块的依存关系、版本控制和打包信息。通过为项目编辑 Ant 脚本和 Ant 属性,您可以进一步自定义程序执行。
将创建 NBM 文件并且可以在 Files 窗口中查看它 (Ctrl-2):
有关创建和开发 NetBeans 模块的更多信息,请参见以下资源:
版本
|
日期
|
更改
|
1 | 2005 年 10 月 29 日 |
|
2 | 2005 年 10 月 30 日 |
|