基于XML的界面自动生成设计与实现
2009-03-02张娟王艳
张 娟 王 艳
[摘要]首先对界面自动生成的原理进行介绍,然后从界面描述文件、界面组建库设计、界面组建事件监听类、界面自动生成器设计和XML文档复用这五个方面进行设计和介绍。
[关键词]XML 界面自动生成
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0120082-01
用户界面是软件系统的重要组成部分,它主要负责接收用户的输入信息并显示程序处理的结果。随着软件系统规模的不断扩大,开发用户界面所耗费的时间和成本也将成倍增加,因此,怎样在较短的时间内设计出符合用户要求的用户界面,提高用户界面的开发效率成了急待解决的一个问题。
一、界面自动生成理论
基于XML的界面自动生成技术涉及界面描述的XML文档、界面组件事件监听类、界面生成器、编程语言的组件库和界面定制工具。界面生成器通过解析界面描述XML文档,调用编程语言的组件库构建组件,为组件绑定相应的事件监听类,自动生成所需要的用户界面。
要生成一个界面,首先要提供界面描述XML文档和界面组件事件监听类。界面描述XML文档使用XML描述界面上所有组件及其属性,包括名称、大小、位置、布局以及与之相对应的事件监听类等。界面描述XML文档可以用XML编辑器来编写,也可以从其他数据源自动生成。界面组件事件监听类负责监听并处理对应界面描述XML文档中组件的事件,比如按钮点击事件等,由组件事件引发的一系列操作都由该类来实现。在界面描述XML文档的解析过程中,界面生成器会根据文档中的组件事件属性值把事件监听类动态加载进来,并与对应的组件绑定。当某一组件的事件被触发时,就会执行它的事件监听类中定义的操作。
二、自动生成界面设计和实现
界面自动生成技术由界面定制工具、界面描述文件(XML)、界面组件事件监听类、组件库、界面自动生成器及生成的界面六大部分组成。在本方案中,还加上了查询到的XML和具有复用价值的XML文档来增加XML文档的可复用性。
要生成一个界面首先要启动一个界面自动生成器,来读取界面描述文件XML文档,该文件描述了界面中每个组件的具体信息,如组件类型、名字、对应的类名、事件监听类名、位置、尺寸以及响应事件和范围限制属性等。界面自动生成器根据这些描述信息对界面中的每个组件进行布局,并增加组件的事件监听功能。每个生成的界面都对应一个界面自动生成器对象,它除了负责生成界面外,还负责保存界面中的所有组件信息及一些界面中使用的全局变量,供事件监听类中的方法使用。
界面自动生成器需要识别界面描述文件中的各种组件类型。因此,就必须定义一个组件库,使用组件库中的组件可以很方便地构建符合要求的配置界面。当然,界面自动生成器也可以读取一个不属于该组件库中的组件,前提是该组件必须是JComponent的子类。界面自动生成器将按照该组件原本的样式显示该组件,并由组件自己完成事件监听的功能。自动生成界面的步骤如下:
第一步:根据显示界面需要编写界面描述XML文件,这步由可由界面定制工具辅助实现。
第二步:读取前台设备的硬件数据,生成界面初始数据,并设置到相应的组件中。
第三步:初始化界面生成器。
第四步:界面生成器读取界面描述的XML文件。
第五步:界面生成器根据描述信息创建界面元素,进行布局并显示界面。具体包括:①将XML文件中的组件元素进行分离,按照每个组件的尺寸和位置进行界面布局,对于容器组件使用递归方法进行解析;②将初始数据设置到各个相应的组件中;③完成组件的事件监听。对于组件库内的组件,界面生成器根据XML文件中定义的组件事件类名,运用JAVA的类反射机制实现该事件类的监听功能;对于组件库外的JComponent类的子类组件,由组件自己完成事件监听功能。
(一)界面描述文件的实现
界面描述文件使用XML语言来描述,既不能过于简单,也不能过于复杂,其表达内容包括:①界面主菜单结构的定义;②字段定义或者属性的描述信息,包括属性的类型、属性名称、属性是否为主键、属性的值来源类(比如,如果显示为一个列表框,则可以定义列表框的值来源,可以对应于server端的一个业务规则,也可以对应于一组固定的值列表)、属性是否可以编辑、属性的事件响应类;③界面元素的上下文action、action的界面处理方法的定义(应用可以定义处理方法类来实现扩展);④界面元素的导航关系的定义;⑤界面元素的层次关系的定义等等。
XML文档第一部分包含一些界面初始化的定义,像
(二)界面组件库设计
组件库的组件封装了一些独特的属性,以实现一定的功能。表1显示了文本框componentLibrary组件的属性。
(三)组件监听类设计
事件监听类的名称在XML文件中标识,就是上文所说的action标签中填写的类名,由街面生成器负责实例化和加载到对应组件上。每个组件类都对应一个事件监听的基类。基类提供了一些监听事件的方法,通常是空的方法,用户定制的事件监听类只需要覆盖这些监听事件方法就可以实现对事件的监听。例如componentLibrary组件对应的action基类是TextFieldAction,
该类封装了componentLibrary的事件监听,包括回车键事件和焦点丢失事件。用户要实现一个componentLibrary组件的事件监听,就必须编写一个新的类,该类继承TextFieldAction并覆盖TextFieldAction中的一些方法。在每个action基类componentLibrary中都提供了public GUIEngine getGe()方法,通过使用该方法可以获取当前界面对应的GUIEngine对象,获取了GUIEngine对象,就可以在事件方法中操纵界面中的任何元素。
(四)界面自动生成器设计和实现
界面自动生成器处于整个界面自动生成系统的核心地位,一方面向应用提供API(Application Programming Interface,应用编程接口),由应用调用来创建界面;另一方面向应用提供数据操作接口,通过配置管理内部提供的数据库接口实现对数据库数据的增删、查改。界面自动生成器使用界面描述语言作为输入,实现界面的自动化生成和处理。界面自动生成器类是GUIEngine,该类解析界面描述的XML文档,读取XML描述文档中的所有节点,并根据节点描述生成相应的组件,绑定组件事件监听器,将组件按照界面的XML描述文件中的定位显示。
界面器的构造函数是public GUIEngine(InitData InitData)。其中InitData是一个接口类,该接口中包括了界面初始化的必要信息,例如节点信息、界面组件初始数据、XML文档信息等。
public JComponent createComponent()方法是界面器的核心方法,它读取XML文档中组件的相关描述并构造界面中的组件对象,最后将组件放在一个JComponent容器中,并返回。该方法从界面描述文件中读取组件信息,并判断组件的类型,根据不同的组件类型调用不同的组件的构造方法,生成组件对象。如果从获得的子节点解析得到的组件不是GUIEngine中预先定义的组件,则认为该组件是用户自定义的,将该组件按用户定义的样式添加到组件容器中去;如果该组件描述错误,则给用户提供一个出错信息。该方法最后根据界面描述文档中各个组件的定位以及控件大小的描述,来设置组件的大小以及在组件容器中摆放的位置。
对于组件库中的组件,界面自动生成器都有一个与之对应的方法来生成该组件对象,并完成action事件的添加。而Create componentLibrary方法的主要功能就是生成一个componentLibrary组件对象,并根据描述该组件的XML对象描述的内容,为该组件添加相应的action。
(五)XML文档的复用
在用XML描述界面信息的基础上,用XML的查询技术如Xquery,XPath等进行模型信息的查询,可将以前的系统开发所获得的界面信息用XML文件的形式存储起来,并组织成一个界面信息库。对于界面信息的查询,可以分别从名称、描述信息、XML文档中定义的元素和属性等关键字进行查询,也可以综合上述各方面进行复合查询。将查询到的界面描述信息经修改和扩展就可加入到新工程的设计中,能够大大提高开发效率。
参考文献:
[1]张敦华,一种界面自动生成技术[J].计算机与数字工程.2004 (5).
[2]徐龙杰,建成.基于模型的用户界面代码自动生成.计算机工程与应用. 2004(12).
[3]Mike Jasonwski.Java,XML,and Web Service Bible[M].电子工业出版社.2002.
[4]吴桂阳,建成,清国,成柱.基于XML的界面模板技术.计算机应用研究. 2004(10).
[5]李大成,陈莘萌. Java与XML的结合应用[J].计算机应用.2002 (2).
作者简介:
张娟,女 河南许昌人,郑州大学升达经贸管理学院助教,在读硕士,研究方向:软件工程,计算机应用; 王艳,女 河南淮滨人,郑州大学升达经贸管理学院助教,在读硕士,研究方向:计算机网络,数据库技术。