Beans 绑定、Swing 应用程序框架以及您一直梦寐以求的 IDE 功能
<o:p></o:p>
自从 NetBeans 5.0 以来人们谈论最多的创新功能之一就是 Project Matisse 和 Form Editor。很多人都认为 Matisse 是各种 IDE 类别和技术中最好的用户界面设计器。由于这个原因,很多开发者都开始或已经开始使用 NetBeans。<o:p></o:p>
有了这个软件,就有了改进和提高的无限空间。如本文中所述,在 NetBeans 6.0 中,熟练的开发者和新的开发者将发现很多新的 Matisse 功能,这些功能有助于改进 Swing 应用程序的开发。<o:p></o:p>
Beans 绑定和 Swing 应用程序框架<o:p></o:p>
基于最新的 JCP 规范 Beans 绑定 (SR 295) 和 Swing 应用程序框架 (JSR 296),桌面开发者们有了几个新的锦囊妙计;而且他们还能够进行更高效的开发。普通 Swing 应用程序开发者从 NetBeans 的 Swing 应用程序框架的改进中获得了更多利益,而平台开发者也不例外。平台开发者在 NetBeans 平台中已经具有一个基于 Swing 的应用程序框架,该框架比 JSR 296 提供的功能多多了。使用 Beans 绑定支持,开发人员获益良多。<o:p></o:p>
Beans 绑定支持<o:p></o:p>
Beans 绑定允许避开千篇一律地编写代码将用户界面组件中的数据复制到数据类或 JavaBeans,或将数据类或 JavaBeans 中的数据复制到用户界面组件。。随着新的 Beans 绑定的不断改进,您现在可以右键单击 UI 元素以及访问 Bind 上下文菜单项。例如,选择 javax.swing.JTextField 的此项菜单项将显示文本的首选绑定属性(请参见图 1)。可以通过属性检查器的 Binding 选项卡访问其他属性(图 2)。
<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style="WIDTH: 257.25pt; HEIGHT: 132.75pt"><v:imagedata o:href="http://www.netbeans.org/images/magazine/matisse/image/image001.png" src="file:///C:\DOCUME~1\fujiang\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape><o:p></o:p> |
图 1. Beans 绑定菜单项。<o:p></o:p> |
<o:p> </o:p>
<v:shape id="_x0000_i1026" type="#_x0000_t75" alt="" style="WIDTH: 363.75pt; HEIGHT: 342pt"><v:imagedata o:href="http://www.netbeans.org/images/magazine/matisse/image/image003.png" src="file:///C:\DOCUME~1\fujiang\LOCALS~1\Temp\msohtml1\01\clip_image003.png"></v:imagedata></v:shape><o:p></o:p> |
图 2. 设置 JtextField 的 Beans 绑定选项。<o:p></o:p> |
<o:p> </o:p>
一旦选择了要绑定的属性之后,将显示一个对话框,在该对话框中,您可以选择目标 JavaBean。然后,您可以使用 Beans 绑定表达式语言输入一个表达式。其语法与 JSP EL 非常类似。除了手动输入表达式之外,使用一个灵巧的选择器(可以作为下拉列表或组合框访问)开发者们可以通过展开属性和子属性来快速构建表达式。<o:p></o:p>
当运行该应用程序时,当选定的 UI 组件失去焦点或用户按 Enter 时,该组件便更新其绑定的组件。主要是开发者不再需要使用大量事件处理代码来管理此类操作和其他操作。<o:p></o:p>
Swing 应用程序框架支持<o:p></o:p>
Swing 应用程序框架提供快速构建完整桌面应用程序的机制。NetBeans 6 为 IDE 中的该框架提供了进一步的完整支持,提供了一组标准的图标,如复制、粘贴和剪切。这比从 Swing 组件中将应用程序分解为各个部分要好,不需要每次都提供启动或关闭应用程序的独立解决方案、基本操作或事件、自定义图标、资源管理器、会话存储等。<o:p></o:p>
要在 NetBeans 6 中创建 Swing 应用程序框架项目,请选择 File|New Project 并在 General 类别下,选择 new Java Desktop Application 项目模板。撰写本文时,可用的应用程序模板有两个:Basic 和 Database(参见图 3)。在将来的版本中将包含其他模板。例如,正在考虑建立新的模板,用来创建基于 Swing 应用程序框架的Web 客户端应用程序。
<v:shape id="_x0000_i1027" type="#_x0000_t75" alt="" style="WIDTH: 546.75pt; HEIGHT: 377.25pt"><v:imagedata o:href="http://www.netbeans.org/images/magazine/matisse/image/image005.png" src="file:///C:\DOCUME~1\fujiang\LOCALS~1\Temp\msohtml1\01\clip_image005.png"></v:imagedata></v:shape><o:p></o:p> |
图 3. 选择桌面应用程序模板。<o:p></o:p> |
Basic 模板生成常规的 Swing 应用程序,该应用程序具有简单的功能,如剪切、复制、粘贴、保存和新建。可以使用这个模板轻松创建类似于记事本或 KWrite 的简单应用程序(请参见图 4)。
<v:shape id="_x0000_i1029" type="#_x0000_t75" alt="" style="WIDTH: 310.5pt; HEIGHT: 285.75pt"><v:imagedata o:href="http://www.netbeans.org/images/magazine/matisse/image/image007.png" src="file:///C:\DOCUME~1\fujiang\LOCALS~1\Temp\msohtml1\01\clip_image007.png"></v:imagedata></v:shape><o:p></o:p> |
图 4. 使用 Basic 模板生成的应用程序示例。<o:p></o:p> |
Database 模板允许用户创建 CRUD 数据库应用程序。和 Apache Derby/JavaDB 或 HSQLDB 一起使用,相当于增强型 Microsoft Access。<o:p></o:p>
对于我来说,Swing 应用程序框架支持最合适开发比较简单的应用程序。将来使用 JSR 277(Java 模块系统)可能会在这方面变得更好。但是,只是模块系统也不能提供一个具有 NetBeans 平台所提供的所有组件和实用程序的框架。对于更复杂的应用程序,我建议您在 NetBeans 平台上构建。还在考虑基于 Swing 应用程序框架的应用程序到基于平台的应用程序的途径,但是在编写本文时这方面内容还没有什么具体实现。<o:p></o:p>
注意:Swing 应用程序框架和 NetBeans 平台都是 Swing 框架。Swing 应用程序框架提供应用程序生命周期管理、会话管理(例如,重新启动应用程序时将窗口存储在同一个位置中)、资源管理器、操作、存储、应用程序上下文以及同步和异步任务。NetBeans 平台提供所有这些功能以及各种其他功能,包括允许模块在其他应用程序项目之间安装它们自己的 UI 菜单、操作和服务的功能强大的模块/插件系统。<o:p></o:p>
更多新功能<o:p></o:p>
NetBeans 6 中的其他新功能包括新的可视菜单设计器、受保护代码定制器改进、组件对齐和改进的自由设计首选间距和复制粘贴支持。<o:p></o:p>
NetBeans 5.5 开发者已经可以使用添加到版本 6 中的其他功能作为对旧版本的更新。这些功能包括自动国际化、可视本地化、具有外观支持的预览、相对字体定义、从项目浏览器或 UI 中拖放组件以及上下文敏感的帮助栏和前/后声明代码编辑器。在即将发布的 IDE 版本中,将会全部集成所有这些功能并且即装即用。<o:p></o:p>
可视菜单设计器<o:p></o:p>
以前版本的 Matisse 支持的应用程序菜单设计功能有限;您需要使用 Inspector 窗口创建菜单项和子菜单。现在可以在 UI 设计器中直观地选择和编辑菜单组件。这从两个方面有助于 Java 桌面应用程序:第一,正在编辑哪个菜单和菜单项变得更明确,第二,不需要预览表单或运行应用程序来查看在运行时菜单的外观。图 5 中便是正在执行操作的可视菜单设计器。
<v:shape id="_x0000_i1030" type="#_x0000_t75" alt="" style="WIDTH: 210pt; HEIGHT: 190.5pt"><v:imagedata o:href="http://www.netbeans.org/images/magazine/matisse/image/image009.png" src="file:///C:\DOCUME~1\fujiang\LOCALS~1\Temp\msohtml1\01\clip_image009.png"></v:imagedata></v:shape><o:p></o:p> |
图 5. 新的可视菜单设计器。<o:p></o:p> |
受保护代码定制器改进<o:p></o:p>
NetBeans 使用受保护代码的机制。Matisse 使用该机制以便生成的代码不会被更改,并且不会受到开发者的破坏,从而允许可视设计器继续工作。但是,有时这个原则有点太过严格,因此对受保护代码的限制一直是 NetBeans 邮件列表中的常见抱怨。<o:p></o:p>
在 NetBeans 6 中,这方面将变得更好,您将能够采用很多方法更改受保护的代码部分。例如,通过初始化和属性/bean 配置帮助您解决计时操作和方法调用的问题。<o:p></o:p>
下面是修改受保护代码的一些选项,所有这些选项都可以通过 Properties 窗口的 Code 选项卡访问(另请参见图 6):<o:p></o:p>
§ Post-Listener-Code – 在设置所有 bean 的所有属性并添加所有侦听器之后添加。<o:p></o:p>
§ Pre-Adding Code and Post-Adding Code – 在将组件添加到父容器(如 JPanel 或 JFrame)之前和之后分别添加。<o:p></o:p>
§ After-All-Set Code – 在完成组件设置之后添加。
<v:shape id="_x0000_i1031" type="#_x0000_t75" alt="" style="WIDTH: 261pt; HEIGHT: 263.25pt"><v:imagedata o:href="http://www.netbeans.org/images/magazine/matisse/image/image011.png" src="file:///C:\DOCUME~1\fujiang\LOCALS~1\Temp\msohtml1\01\clip_image011.png"></v:imagedata></v:shape><o:p></o:p> |
图 6. 受保护代码定制器改进。<o:p></o:p> |
与其说新的前/后声明代码编辑器是推进开发的有利助手,不如说是必不可少的一个工具。从 Java 5 开始,现在开发者可以在 Java 源代码中注释很多不同的内容,对于需要注释的库或技术,Matisse 必须允许开发者在某种程度上设置这些注释。还可以通过 Properties 窗口的 Code 选项卡中的 Pre-Declaration Code 字段添加注释;并且有一个 Post-Declaration Code 字段可以使用。<o:p></o:p>
NetBeans 6 附带一个新的代码定制器,使用该定制器您可以将源代码更轻松地加入到受保护的代码部分。可以通过右键单击设计器中的 UI 表单,然后选择 Customize Code 来访问该定制器。将弹出一个具有<