NetBeans 平台快速入门
欢迎使用 NetBeans 平台!
本教程简要地向您介绍 NetBeans 平台工作流,演示了创建一个简单 HTML 编辑器的过程。创建的 HTML 编辑器尽管简单,但是功能非常成熟,因为它将重用 NetBeans 平台提供的基础结构。例如,无需任何编码,您的 HTML 编辑器即可拥有一个成熟的窗口系统。完成本教程后,您将基本掌握如何在 NetBeans 平台创建、构建和运行应用程序。
完成本教程后,您可以参考 NetBeans 平台学习资源 继续学习。学习资源提供全面的教程,内容涉及用于各种应用程序类型的 NetBeans API。如果要学习 "Hello World" 应用程序,可以跳过此教程,直接开始学习资源的学习。
目录
要学习本教程,您需要下表中列出的软件和资源。
| 软件或资源 | 所需版本 |
|---|---|
| NetBeans IDE | 版本 6.1 |
| Java Developer Kit(JDK) | 版本 6 或 版本 5 |
为了进行故障排除,您还可以选择 下载完整的示例 并检查资源。
在本教程结束时,您的 HTML 编辑器将如下图所示:
注意:尽管这是一个非常简单的演示程序,但请您认真对待。这是一个真正的 程序,通过该程序可轻松编辑 HTML 页面,并且它还具有代码完成、验证和预定义 HTML 片断的功能。
本教程所创建的 HTML 编辑器是一个“在 NetBeans 平台上”构建的富客户端应用程序。这意味着 IDE 的核心,也就是 NetBeans 平台,将是您应用程序的基础。在 NetBeans 平台上,添加所需的模块,并且排除 IDE 需要但应用程序不需要的模块。下面您将看到 NetBeans 平台(应用程序的基础)中添加的一些 IDE 模块:
创建该 HTML 编辑器需要生成应用程序框架,排除您不需要的模块和用户界面项,然后将 Favorites 窗口设置为 IDE 启动时默认打开的窗口。IDE 用户界面元素支持所有这些活动。
您将看到构建过程多么简单、多么容易,更确切地说是在 NetBeans 平台上组装 一个功能全面的应用程序。最后,我们将向您介绍如何使最终产品可以方便地通过 WebStart 下载和启动。
注意:虽然 NetBeans 平台是一个独立的产品,但不必为了学习本教程而单独下载它。我们将在 IDE 中开发富客户端应用程序,然后排除与 IDE 相关但对于您的应用程序来说是多余的模块。
生成主干应用程序
在 NetBeans 平台上创建应用程序时,首先需要创建 NetBeans 平台Application 项目。默认的模块 NetBeans 平台Application 项目包括 NetBeans 平台中的所有 模块和 NetBeans IDE 中的所有 模块。由于我们并不需要所有模块,因此我们将排除不需要的模块。
- 使用 New Project (Ctrl-Shift-N) 向导,从 NetBeans 模块类别中的模板创建 NetBeans 平台Application Project,如下图所示。
单击“下一步”并将 NetBeans 平台Application 项目命名为 "NetBeansHTMLEditor"。单击“完成”按钮。
- 右键单击项目节点,选择“属性”选项,然后在 NetBeans 平台Application 的“项目属性”对话框中做少量更改:
- 在“构建”面板中,单击“创建独立应用程序”按钮,指定在 NetBeans 平台上生成富客端户应用程序。
确保为可执行文件添加了标记名称,为标题栏调整了应用程序标题,如下所示:
- 在“启动画面”面板中,注意可以为应用程序提供程序启动画面和进度提示条,如下所示:
注意:如果您还没有程序启动画面,请使用:这个。
在“项目属性”对话框的“库”面板中,您会看到一组“集群”列表。集群是相关模块的集合。需要选择的集群只有 gsf1、ide9 和 platform8。取消选中所有其他集群。现在需要启用和禁用许多模块,因为只需要选择与我们的 HTML 编辑器相关的那些模块。在“库”面板中选中或取消选中一个模块时,都将在应用程序的 NetBeans 平台配置文件中添加一个条目。为了加快该过程,我们将这些条目粘贴到该文件。关闭“项目属性”对话框。
展开 Important Files 节点,然后打开“NetBeans 平台配置”文件。粘贴以下条目:
disabled.clusters=\ apisupport1,\ harness,\ java2,\ nb6.1,\ profiler3 disabled.modules=\ org.mozilla.rhino.patched,\ org.netbeans.api.debugger,\ org.netbeans.api.visual,\ org.netbeans.core.ide,\ org.netbeans.core.multiview,\ org.netbeans.core.nativeaccess,\ org.netbeans.insane,\ org.netbeans.lib.cvsclient,\ org.netbeans.libs.commons_logging,\ org.netbeans.libs.ini4j,\ org.netbeans.libs.jna,\ org.netbeans.libs.svnClientAdapter,\ org.netbeans.libs.xerces,\ org.netbeans.modules.autoupdate.services,\ org.netbeans.modules.autoupdate.ui,\ org.netbeans.modules.classfile,\ org.netbeans.modules.core.kit,\ org.netbeans.modules.css.editor,\ org.netbeans.modules.css.visual,\ org.netbeans.modules.db,\ org.netbeans.modules.db.core,\ org.netbeans.modules.db.drivers,\ org.netbeans.modules.db.kit,\ org.netbeans.modules.db.mysql,\ org.netbeans.modules.db.sql.editor,\ org.netbeans.modules.db.sql.visualeditor,\ org.netbeans.modules.dbapi,\ org.netbeans.modules.editor.bookmarks,\ org.netbeans.modules.editor.kit,\ org.netbeans.modules.extbrowser,\ org.netbeans.modules.gototest,\ org.netbeans.modules.httpserver,\ org.netbeans.modules.ide.kit,\ org.netbeans.modules.javascript.editing,\ org.netbeans.modules.javascript.hints,\ org.netbeans.modules.javascript.kit,\ org.netbeans.modules.javascript.refactoring,\ org.netbeans.modules.languages,\ org.netbeans.modules.languages.bat,\ org.netbeans.modules.languages.diff,\ org.netbeans.modules.languages.manifest,\ org.netbeans.modules.languages.sh,\ org.netbeans.modules.localhistory,\ org.netbeans.modules.mercurial,\ org.netbeans.modules.project.ant,\ org.netbeans.modules.project.libraries,\ org.netbeans.modules.properties,\ org.netbeans.modules.properties.syntax,\ org.netbeans.modules.schema2beans,\ org.netbeans.modules.sendopts,\ org.netbeans.modules.server,\ org.netbeans.modules.servletapi,\ org.netbeans.modules.subversion,\ org.netbeans.modules.tasklist.kit,\ org.netbeans.modules.tasklist.projectint,\ org.netbeans.modules.tasklist.todo,\ org.netbeans.modules.tasklist.ui,\ org.netbeans.modules.timers,\ org.netbeans.modules.usersguide,\ org.netbeans.modules.utilities,\ org.netbeans.modules.utilities.project,\ org.netbeans.modules.versioning,\ org.netbeans.modules.versioning.system.cvss,\ org.netbeans.modules.versioning.util,\ org.netbeans.modules.Web.flyingsaucer,\ org.netbeans.modules.xml,\ org.netbeans.modules.xml.axi,\ org.netbeans.modules.xml.core,\ org.netbeans.modules.xml.lexer,\ org.netbeans.modules.xml.multiview,\ org.netbeans.modules.xml.retriever,\ org.netbeans.modules.xml.schema.completion,\ org.netbeans.modules.xml.schema.model,\ org.netbeans.modules.xml.tax,\ org.netbeans.modules.xml.text,\ org.netbeans.modules.xml.tools,\ org.netbeans.modules.xml.wsdl.model,\ org.netbeans.modules.xml.xam,\ org.netbeans.modules.xml.xdm,\ org.netbeans.modules.xsl,\ org.netbeans.spi.debugger.ui,\ org.netbeans.spi.viewmodel,\ org.netbeans.swing.dirchooser,\ org.openide.compat,\ org.openide.util.enumerations enabled.clusters=\ gsf1,\ ide9,\ platform8 nbplatform.active=default
现在拥有了一个与 HTML 编辑器相关的 NetBeans 模块的子集。但是,尽管您需要现在拥有的这些模块,但可能不需要这些模块提供的所有用户界面元素。在下一节中,您调整用户界面并自定义特定于将创建的 HTML 编辑器的窗口布局。
调整用户界面
可以根据需要保留或删除所选模块提供的用户界面。例如,您的 HTML 编辑器可能并不需要“工具”菜单下的一些项目或所有项目。同样,您也可能不需要一些工具栏或工具栏按钮。在本部分中,我们将修改 IDE 的用户界面,只留下对您的富客户端应用程序有用的子集。
- 展开 NetBeans 平台Application 项目,右键单击 Modules 节点,然后选择“添加”选项,如下所示:
此时将出现“新建项目”向导 (Ctrl-Shift-N)。将项目命名为 BrandingModule,单击“下一步”。
- 在“代码名称基”字段中,输入 org.netbeans.brandingmodule。
- 在“XML 层”字段中,输入包的名称并附加 "layer.xml",比如 "org/netbeans/brandingmodule/layer.xml",然后单击“完成”。
注意:如果没有在此字段中输入 layer.xml 文件的位置,则将不会创建该文件。在这种情况下,在主包中创建一个名为 "layer.xml" 的文件并以如下方式手动在“模块清单”中注册。
OpenIDE-Module-Layer:org/netbeans/brandingmodule/layer.xml
- 在标记模块中,展开 layer.xml 节点。此时将出现两个子节点:
注意:在手动添加 layer.xml 文件的情况下,您必须扩展 Important Files 节点才能扩展其中的 XML Layer 节点。
- 在 <this layer in context> 节点中,IDE 将显示所有文件夹和文件的合并视图,所有模块在其层中注册。要排除一些项,请右键单击这些项,然后选择“删除”选项,如下所示:
然后,IDE 向模块的 layer.xml 文件中添加标记,当安装模块时将隐藏您已删除的那些项。例如,通过右键单击 Menu Bar/Edit,我们可以移除 HTML 编辑器不需要的菜单项。此操作将生成一些代码片段,如 layer.xml 文件中的以下片段:
<folder name="Menu"> <folder name="Edit"> <file name="org-netbeans-modules-editor-MainMenuAction$StartMacroRecordingAction.instance_hidden"/> <file name="org-netbeans-modules-editor-MainMenuAction$StopMacroRecordingAction.instance_hidden"/> </folder> </folder>
上面代码片段的结果是,另一个模块提供的“启动宏记录”和“停止宏记录”操作从菜单中被您标记模块移除。要再次显示它们,只需从 layer.xml 文件中删除上述标记。
使用上一步中介绍的方法,根据需要隐藏工具栏、工具栏按钮、菜单和菜单项。
完成此步骤后,查看 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="Menu"> <file name="BuildProject_hidden"/> <folder name="File"> <file name="Separator2.instance_hidden"/> <file name="SeparatorNew.instance_hidden"/> <file name="SeparatorOpen.instance_hidden"/> <file name="org-netbeans-modules-project-ui-CloseProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-CustomizeProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-NewFile.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-NewProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-OpenProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-RecentProjects.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-SetMainProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-groups-GroupsMenu.shadow_hidden"/> </folder> <file name="Refactoring_hidden"/> <file name="RunProject_hidden"/> <folder name="Window"> <file name="ViewRuntimeTabAction.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-logical-tab-action.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-physical-tab-action.shadow_hidden"/> </folder> </folder> </filesystem>
调整窗口布局
使用 <this layer in context> 节点,我们不仅可以删除现有项目,还可以更改其内容。例如,HTML 编辑器需要操作 HTML 文件。因此,同 Java 源文件和项目合作良好的常规 IDE 相比,在初始布局中显示 Favorites 窗口很重要。
窗口布局的定义也作为层中的文件介绍,所有这些文件都存储在 Windows2文件夹下。Windows2 文件夹中的文件是 Window 系统 API 定义的伪可读 XML 文件。它们非常复杂,但好在 HTML 编辑器没有必要全部理解它们,如下所示:
- 在标记模块的 <this layer in context> 节点处,右键单击 Windows2 节点,然后选择 Find,如下所示:
- 搜索名称为 Favorites 的对象,忽略大小写。我们将找到两个文件:
第一个文件定义组件的外观和创建方式。由于不需要更改外观以及创建方式,因此也不需要修改该文件。第二个文件对您的意义较大,它包含以下内容:
<tc-ref version="2.0"> <module name="org.netbeans.modules.favorites/1" spec="1.1" /> <tc-id id="favorites" /> <state opened="false" /> </tc-ref>
- 尽管大多数 XML 的含义都很模糊,但是不需要读取任何文档也能看懂其中的一行。将 false 更改为 true 似乎可以在默认情况下打开该组件。请照此方法操作。
-
使用类似的方法,您还可以将以下窗口从默认的开启状态更改为您希望它们在 HTML 编辑器中所表现的状态。
- CommonPalette.wstcref。Component Palete 的开启状态为 false。将它更改为 true。
- navigatorTC.wstcref。Navigator 的开启状态为 true。将它更改为 false。
- projectTabLogical_tc.wstcref。项目窗口的开启状态为 true。将它更改为 false。
- projectTab_tc.wstcref。文件窗口的开启状态为 true。将它更改为 false。
- runtime.wstcref。服务窗口的开启状态为 true。将它更改为 false。
您将看到标记模块包含几个新文件,每一个对应一个您更改的文件。实际上,这些文件覆盖了前几步中已经找到的文件,因此已经提供了覆盖窗口布局所需的信息。
查看 layer.xml 文件,现在它应该包含以下内容。如果没有,则将以下内容复制并粘贴到 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="Menu"> <file name="BuildProject_hidden"/> <folder name="File"> <file name="Separator2.instance_hidden"/> <file name="SeparatorNew.instance_hidden"/> <file name="SeparatorOpen.instance_hidden"/> <file name="org-netbeans-modules-project-ui-CloseProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-CustomizeProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-NewFile.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-NewProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-OpenProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-RecentProjects.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-SetMainProject.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-groups-GroupsMenu.shadow_hidden"/> </folder> <file name="Refactoring_hidden"/> <file name="RunProject_hidden"/> <folder name="Window"> <file name="ViewRuntimeTabAction.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-logical-tab-action.shadow_hidden"/> <file name="org-netbeans-modules-project-ui-physical-tab-action.shadow_hidden"/> </folder> </folder> <folder name="Windows2"> <folder name="Modes"> <folder name="commonpalette"> <file name="CommonPalette.wstcref" url="CommonPaletteWstcref.xml"/> </folder> <folder name="explorer"> <file name="favorites.wstcref" url="favoritesWstcref.xml"/> <file name="projectTabLogical_tc.wstcref" url="projectTabLogical_tcWstcref.xml"/> <file name="projectTab_tc.wstcref" url="projectTab_tcWstcref.xml"/> <file name="runtime.wstcref" url="runtimeWstcref.xml"/> </folder> <folder name="navigator"> <file name="navigatorTC.wstcref" url="navigatorTCWstcref.xml"/> </folder> </folder> </folder> </filesystem>
调整 Favorites 窗口
在文件窗口显示的 NetBeans 平台Application 项目的 branding 文件夹的子文件夹中,我们可以覆盖在 NetBeans 资源中定义的字符串。在本部分中,我们将覆盖在 Favorites 窗口中用于定义标签的字符串。例如,我们将 Favorites 标签值修改为 HTML Files,因为该窗口将专门用于 HTML 文件。
- 打开文件窗口并展开 NetBeans 平台Application 项目的 branding 文件夹。
- 在 branding/modules 内创建一个新文件夹结构。新的文件夹应该命名为 org-netbeans-modules-favorites.jar。在文件夹内,创建文件夹结构:org/netbeans/modules/favorites。在最后一个文件夹内,也就是在 favorites 文件夹内, 创建一个新的 Bundle.properties 文件。
这个文件夹结构和资源文件与 Favorites 窗口相关的 NetBeans 资源中的文件夹结构相匹配。
- 添加在下面屏幕截图中显示的字符串,来覆盖 Favorites 窗口资源中匹配的资源文件所定义的相同字符串。
为了简化此步骤,复制并粘贴上文定义的字符串:
Favorites=HTML Files ACT_AddOnFavoritesNode=&Find HTML Files... ACT_Remove=&Remove from HTML Files List ACT_View=HTML Files ACT_Select=HTML Files ACT_Select_Main_Menu=Select in HTML Files List # JFileChooser CTL_DialogTitle=Add to HTML Files List CTL_ApproveButtonText=Add ERR_FileDoesNotExist={0} does not exist. ERR_FileDoesNotExistDlgTitle=Add to HTML Files List MSG_NodeNotFound=The document node could not be found in the HTML Files List.
运行应用程序
运行应用程序很简单,只需右键单击项目节点,然后选择菜单项。
- 右键单击应用程序的项目节点,然后选择“清楚并构建全部”选项。
- 右键单击应用程序的项目节点,然后选择“运行”选项:
- 在应用程序部署完成后,在 Favorites 窗口内右键单击并选择包含 HTML 文件的文件夹,然后打开 HTML 文件,如下所示:
分发应用程序
从两种方法中选择一种分发您的应用程序。如果需要尽可能控制您的应用程序,则应该使用 Web start 在 Web 上分发应用程序。在这种情况下,希望更新应用程序时,您应该本地进行并通知最终用户进行了更新,他们在下一次联机启动应用程序时将自动获取更新。此外,还可以选择使用包含应用程序的 ZIP 文件进行分发。使用这种方式,最终用户将在本地拥有完整的应用程序。您可以通过下文描述的更新机制分发更新和新特性。
通过 ZIP 文件分发应用程序
为了使应用程序具有可扩展性,我们需要用户安装模块来增强应用程序功能。为此,仅需要启用少量额外模块,该模块可以将 Plugin Manager 和 HTML 编辑器捆绑使用。
- 右键单击 NetBeans 平台Application 项目,然后选择“属性”选项。在“项目属性”对话框中,使用“库”面板并选择“更新中心”复选框、“自动更新服务”复选框以及“自动更新 UI”复选框,显示如下:
- 右键单击应用程序的项目节点,然后选择“清楚并构建全部”选项。
- 再次运行应用程序。请注意,在“工具”菜单下已经有了一个名为“插件”的新菜单项。
- 选择新的“插件”菜单项并安装一些对 HTML 编辑器有用的插件。浏览 Plugin Portal 并查找一些合适的插件。这也是最终用户更新其本地安装的应用程序的方式。
右键单击应用程序的项目节点,然后选择“构建 ZIP 分发”选项。
- 在 dist 文件夹(可在文件窗口中找到)中,您现在应该能够看到 ZIP 文件,扩展它即可看到其内容:
注意:如上所示,在 bin 文件夹中创建应用程序启动程序。
通过共享 NetBeans Web Start 存储库分发 HTML 编辑器
除了使用 ZIP 文件分发之外,我们还可以通过微调第一次启动应用程序时生成的 master.jnlp 文件进行 Webstart 分发。即使已经完成了此操作,分发准备工作也还没有结束。至少还需要修改信息部分以提供更好的描述和图标。
对标准 JNLP 基础结构所做的另一个修改是在 www.netbeans.org. 上使用共享 JNLP 存储库。在默认的情况下,为套件生成的 JNLP 应用程序始终包含其所有的模块,以及它所依赖的所有模块。这对于企业内部的互联网使用可能很有用,但是它对于大多数广泛的互联网使用不太现实。对于互联网,如果在 NetBeans 平台上构建的所有应用程序都引用 NetBeans 模块中的某个存储库,它可能更好,这意味着可以共享这些模块,而不需要多次下载。
NetBeans 6.1 就有这样的存储库。它不包含 NetBeans IDE 拥有的所有模块,但是它包含了一些足以使非 IDE 应用程序非常类似 HTML 编辑器的模块。要使用存储库,您仅需要添加正确的 URL 来修改 platform.properties。
# share the libraries from common repository on netbeans.org # this URL is for release60 JNLP files: jnlp.platform.codebase=http://www.netbeans.org/download/6_0/jnlp/
只要应用程序作为 JNLP 应用程序启动,就可以从 netbeans.org 下载其所有共享插件模块并和执行相同操作的其他程序共享。
更多信息
这包括 NetBeans 平台快速入门教程。该文档讨论了如何创建一个插件来向 IDE 添加 Google 搜索工具栏。关于在 NetBeans 平台上创建和开发应用程序的更多信息,请参阅以下资源:
