源自:http://www.netbeans.org/community/magazine/html/03/matisse/index_zh_CN.html)
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||||
Beans Binding、Swing Application Framework 以及希望在 IDE 中实现的其它特性 | |||||||||||||||||||||||||||||||||||||||||||||||||||
自NetBeans 5.0 以来,人们最常谈及的且具有创新性的特性是 Project Matisse 或 Form Editor。许多人都认为,在不同 IDE 产品和技术中, Matisse 是最好的用户界面设计器。因此,许多开发人员开始使用 NetBeans。 对于软件来说,革新和发展是永远没有尽头的。在本文中将看到,NetBeans 6.0 中许多新的 Matisse 特性有助于改进 Swing 应用程序的开发。 Beans Binding 和 Swing Application Framework 在基于最新的 JCP 规范 Beans Binding(JSR 295)和 Swing Application Framework(JSR 296)构建应用程序方面,NetBeans 6.0 为桌面开发人员提供了一些方便的特性;他们还会从更高效的开发中获益。一般的 Swing 应用程序开发人员会从 NetBeans 中的 Swing Application Framework 改进中获得比较大的收益,但是平台开发人员也不是一无所获。在 NetBeans Platform 中已经建立了一个基于 Swing 的应用程序框架,它提供的特性比 JSR 296 多得多。但是,Beans Binding 支持提供了更大的收益。 Beans Binding 支持 Beans Binding 免去了在用户界面组件和数据类或 JavaBean 之间复制数据的繁琐工作。有了新的 Beans Binding 改进,就可以通过右击 UI 元素来访问 Bind 上下文菜单项。例如,选择某个javax.swing.JTextField 的这个菜单项,就会显示首选的绑定属性 text(见图 1)。可以通过属性检查器的 Binding 选项卡访问其它属性(图 2)。
选择了要绑定的属性之后,显示一个对话框,可以在这里选择目标 JavaBean。然后可以输入一个使用 Beans Binding Expression Language 的表达式。这种语言的语法与 JSP EL 非常相似。除了手工输入表达式之外,还可以使用一个选择器(它是以下拉列表或组合框访问的形式来访问的),通过展开属性和子属性快速构建表达式。 在运行应用程序时,当选择的 UI 组件失去焦点或用户按回车时,它会更新它的绑定组件。重点是开发人员不再编写大量事件处理代码,来管理这个操作和其它操作。 Swing Application Framework 支持 Swing Application Framework 提供了快速构建完整的桌面应用程序的机制。NetBeans 6 在 IDE 中集成了对这个框架的支持,同时提供一组标准图标,比如 Copy、Paste 和 Cut。这种方式比用 Swing 组件组装应用程序更方便,可以为启动或关闭应用程序、基本动作或事件、定制图标、资源管理器、会话存储等功能建立一个单独的解决方案,从而节省开发时间。 在 NetBeans 6 中创建 Swing Application Framework 项目的方法是选择 File|New Project,并在 General 类别下选择新的 Java Desktop Application 项目模板。到编写本文时,有两个应用程序模板:Basic 和 Database(见图 3)。以后的版本会提供其它模板。例如,基于 Swing Application Framework 创建 web 客户机应用程序的模板。
Basic 模板生成一个常规的 Swing 应用程序,包含 Cut、Copy、Paste、Save 和 New 等简单特性。用这个模板很容易创建 Notepad 或 KWrite 这样的简单应用程序(见图 4)。
Database 模板可以用来创建 CRUD 数据库应用程序。除了使用 Apache Derby/JavaDB 或 HSQLDB 之外,它也可以使用 Microsoft Access。 对于我来说,Swing Application Framework 支持最适合开发比较简单的应用程序。以后采用 JSR 277(Java Module System)可能会更好些。但是,仅有模块系统并不能提供 NetBeans Platform 提供的所有组件和实用程序。对于比较复杂的应用程序,建议在 NetBeans Platform 上构建。从基于 Swing Application Framework 的应用程序迁移到基于 Platform 的应用程序的方法正在研究,但是到编写本文时还没有具体实现。 注意:Swing Application Framework 和 NetBeans Platform 都是 Swing 框架。Swing Application Framework 提供应用程序生命周期管理、会话管理(例如,在应用程序重新启动时在相同的位置恢复窗口)、一个资源管理器、动作、存储、应用程序上下文以及同步和异步任务。除了提供所有这些特性之外,NetBeans Platform 还增加了许多其它特性,包括一个强大的模块/插件系统,允许模块在其它应用程序元素中安装自己的 UI 菜单、动作和服务。 其它新特性 NetBeans 6 中增加的新特性包括一个新的可视菜单设计器、对 Protected Code Customizer 的改进、组件的居中以及对 Free Design 的首选间隙和复制粘贴支持的改进。 NetBeans 5.5 开发人员可以通过安装更新,使用 NetBeans 6 中的其它新增特性。这些特性包括自动的国际化、可视本地化、外观和感觉的预览支持、相对字体定义以及将组件从项目管理器拖动到 UI 的能力,还有上下文相关的帮助栏和 Pre/Post Declaration Code Editor。在以后的 IDE 版本中,将集成所有这些特性,无需安装或设置。 可视菜单设计器 以前的 Matisse 版本只提供功能有限的应用程序菜单设计支持;必须使用 Inspector 窗口创建菜单项和子菜单。现在,可以在 UI 设计器中以可视方式选择并编辑菜单组件。这在两个方面对 Java 桌面应用程序开发有帮助:可以更明显地看到当前正在编辑哪个菜单和菜单项,而且不必预览视窗或运行应用程序,就能够看到菜单在运行时的外观。图 5 显示可视菜单设计器。
对 Protected Code Customizer 的改进 NetBeans 使用受保护代码的概念。Matisse 使用这个概念确保生成的代码不被开发人员修改或破坏,从而使可视设计人员的工作不受干扰。但是有时候,这个限制有点儿过分严格,对受保护代码的限制是 NetBeans 邮件列表上常常受到质疑的问题。 在 NetBeans 6 中,这个方面已经改进了,可以以多种方式修改受保护代码部分。这有助于解决与同步动作和方法调用相关的问题,例如初始化和属性/bean 配置。 有几种修改受保护代码的方法,这些都要使用 Properties 窗口的 Code 选项卡(见图 6): § Post-Listener-Code —— 在设置所有 bean 的全部属性并添加所有监听器之后,添加这些代码。 § Pre-Adding Code 和 Post-Adding Code —— 在父容器(比如 JPanel 或 JFrame)中添加组件之前和之后,添加这些代码。 § After-All-Set Code —— 在组件完全设置好之后,添加这些代码。
新的 Pre/Post Declaration Code Editor 是一项必备特性,而不仅仅是开发改进。从 Java 5 开始,开发人员可以在 Java 源代码中给不同的目标加注释,为了支持需要注释的库或技术,Matisse 必须允许开发人员设置这些注释。可以通过 Properties 窗口的 Code 选项卡中的 Pre-Declaration Code 和 Post-Declaration Code 框添加注释。 NetBeans 6 附带一个新的代码定制器,可以更轻松地将源代码插入受保护代码中。访问它的方法是,在设计器中右击 UI 窗体并选择 Customize Code。这时会显示一个包含 Java 编辑器的对话框,见图 7。
现在可以更轻松地沿中心线对齐组件。Matisse 现在允许选择一组组件,让它们对齐第一个组件的中心线。可以进行水平居中和垂直居中。当前,必须选择多个组件;然后让所有组件居中。另一个选项可以让组件在父容器中水平居中和垂直居中。 更多的间隙 在 NetBeans 6 之前,Free Design 布局管理器在布置组件时只支持一个首选间隙。在 6.0 中,支持三个首选间隙。首选间隙是组件之间的间距,它应用于组件的所有边上,见图 8。有三个首选间隙可供选择,这让开发人员可以更好地控制组件的间距。
更好的复制/粘贴支持 在 6.0 之前,使用 Free Design 布局时,复制和粘贴会产生糟糕的结果。无论选择了多少个组件,它都会把复制的所有组件放在 UI 窗体的 [0,0] 位置上。这个问题现在已经解决了。复制和粘贴不会再弄乱布局,粘贴的位置现在与原来的组件拉开一定的距离。复制之后,组件还会保持它们的布局(见图 9)。
自动的国际化和可视本地化 在以前的 NetBeans 版本中,UI 的国际化和本地化需要执行几个额外的步骤。现在,这个过程已经简化了。在以前的版本中,必须分别设置每个 UI 组件,让它们从正确的资源束获取值。然后,为了建立本地化的资源束,需要手工创建资源束文件或本地化的条目,输入适合本地区的文本,并相应地设置文件格式(例如,使用不同的编码)。 在 NetBeans 6.0 中,在 UI 设计期间可以让 Matisse 自动实现应用程序的国际化。这意味着,对于原来需要手工国际化的每个资源,Matisse 会自动地将 UI 设计器中提供的值添加到一个资源束中。对于所有 UI 元素,都会这么做。 可视本地化特性与自动国际化特性配合工作。可以在 Inspector 窗口的树中右击最上面的窗体节点,找到 Properties 窗口中的 Design Locale 组合框,然后选择一个地区或添加新的地区。 选择 Design Locale 之后,只需按照一般方式编辑 UI 中的文本。系统会用 UI 中输入的值自动实现这个 Design Locale 的本地化。可以修改地区,然后为新选择的地区重新设置值。所以,用 NetBeans 6 创建完全国际化的 UI 是非常容易的(见图 10)。
外观和感觉的预览支持 在 NetBeans 6.0 之前,无法在设计器中为常规 Swing 应用程序设置外观和感觉。开发人员需要添加适当的代码来设置应用程序的外观和感觉。 通过源代码设置常规 Swing 应用程序的外观和感觉是非常简单的。但是,由于 Form Editor 不允许设置外观和感觉,所以开发人员无法看到,在采用不同外观和感觉的情况下应用程序在运行时的样子。这个问题已经解决了。 在 NetBeans 6.0 中,可以用任何可用的外观和感觉预览窗体。在 Inspector 窗口中,开发人员可以右击窗体容器节点,或者右击 Other Components 节点下面的同级节点(它的同胞节点),这些节点具有 JFrame、JDialog 或 JPanel 等窗体扩展类名。然后展开 Preview Design 子菜单并选择外观和感觉。这样就可以用所选的外观和感觉预览窗体。 也可以通过在 UI 设计器中右击窗体来访问 Preview Design 子菜单。 相对字体定义 您是否希望相对于系统或应用程序的一般字体定义稍大或稍小的 UI 字体?这样就不必为每个组件设置绝对的字体。相反,特定组件的字体可以设置为不同的相对大小,或者具有与应用程序或系统主字体不同的样式。 在 Matisse 的最新版本中,字体的定义已经大大简化了。在窗体上选择一个 UI 组件,然后在 Properties 窗口中单击 font 属性右边的按钮。这时会显示字体编辑器。可以在这里选择 “Derive the font from the default font” 复选框并选择字体样式。字体的大小可以相对于默认字体;大小也可以设置为绝对数值。无论采用哪种大小,字体都不是硬编码的,会在运行时决定。这个特性使用了 Font.deriveFont() 方法。 将组件从 Project Explorer 拖动到 UI 在以前的 NetBeans 版本中,开发人员必须将 UI 组件从正在开发的项目安装到 Form Editor 的面板中,然后才能在 UI 窗体上使用它们。这会使对组件的修改出现问题,而且在项目 UI 中使用来自子项目的组件也比较复杂。但是,这种情况已经改变了。 现在可以建立一个库作为子项目或依赖项。在父项目中创建一个新窗体,然后可以将子项目的 UI 控件/类从项目层次结构中拖出来,直接拖到窗体上,而不需要将它们添加到面板或全局 IDE 中。组件实际上是项目级的元素:一个更好更明确的解决方案。 上下文相关的帮助栏 新的上下文相关的帮助栏(见图 11)对新手和有经验的开发人员都有帮助。它对新用户的帮助可能更大,因为它可以帮助他们快速了解 Matisse 特性。新的帮助栏会提供与上下文相关的提示,说明用当前选择的组件或特性可以做什么。有经验的用户也可能会发现他们所不了解的快捷方法或特性。
结束语 Matisse 是促使 NetBeans 社区迅速扩大的原因之一,而且它在每个版本中都会得到改进。6.0 版也不例外,而且最新的特性大大提高了 Swing 应用程序的开发效率。每个人都应该试试它。 NetBeans 6.0 Matisse 特性和其它特性还在发展之中。在最终版本中,生成的 UI 代码应该会得到改进,还会有许多其它新特性和改进。
|