图形界面设计技术对我来说就是这样我很早以前就对这种技术很感兴趣但是能够查找到资源很少我常常自己冥想图形设计界面是如何画出来;描述界面元数据和代码是如何解析和映射;界面组件属性是如何设置和查看后来随着对于Swing原理和技术深入了解使得我对实现界面设计工具越来越胸有成主终于在2002年某个时候大胆动手气呵成后来又分别在2003年和2005年分别做过个对于其中具体实现技术又有了更深刻理解
言归正传前文提到 3个问题也是Swing界面设计工具首先要解决 3个问题
Swing图形设计工具界面绘制般使用SwingRenderer思想实现Renderer思想在前面许多文章中都有提及其基本原理是将渲染组件图形对象传递给其他组件诸如pa、paAll、paChildren、paComponent等渲染思路方法让该组件代理完成具体界面绘制这种技术经常在JTable、JList、JTree和JComboBox等复杂Swing组件中使用Renderer思想是代码复用和动态绑定思想在Swing架构中具体体现它包含个深层含义是对于具体组件外观绘制负责渲染宿主组件不需要知道被绘制组件绘制是如何进行只要将自己图形设备对象传递给被绘制组件渲染思路方法就可以了当然现实中图形界面设计工具还需要渲染其他辅助图形如当前选定组件边框等而这些都不会是什么问题了
因此Swing界面设计工具般首先要在内存中构建被设计界面组件树当要绘制设计工具界面时只需将其Graphics对象传递给组件树顶层容器pa思路方法就可以了
如何构建被设计界面组件树呢?这个界面组件树数据结构由描述界面元数据甚至是界面源代码码解析生成界面元数据或源代码解析生成是界面设计工具中最关键技术的目前主要有 3种解决思路方法第种是Delphi、VB为代表资源文件方式第 2种是NetBeans Mattise为代表xml界面描述文件方式第 3种是Eclipse VE为代表代码解析和生成技术Java界面设计工具般采用后两种方式
界面描述文件思路方法相对比较简单其核心思想是将界面组件树采用xml文件(或其它格式)方式保存起来以后或者预先生成静态界面源代码代码或者在运行时根据它动态生成界面由于xml解析要比java代码解析简单得多所以采用这种方式实现比较简单而且界面设计动作容易控制缺点是必须维持描述文件和源代码文件同步另外这种xml配置文件语法结构往往是非公开使得它设计界面文件不能被其他界面设计工具所复用另外员不能随意修改生成代码描述文件和源代码的间生成关系是单方向
第 3种直接将Java界面源代码解析成组件数这种思路方法也有两种做法种是对代码进行语法语义分析并构建出要设计界面组件树来;种是使用Java编译器将源文件编译成最终使用类加载器动态加载并反射生成最终组件树前者缺点是非常复杂需要丰富编译知识;优点是不需要将源代码编译通过后者优点是解析非常简单全部交给了编译器完成;缺点是如果源码存在编译就无法最终生成设计界面
第 3个基本技术即组件属性反射般使用Java Beans技术实现Java平台提供了解决界面设计工具组件反射工具如BeanIntrospector、BeanDescriptor等类它们建立在Java反射技术基础上提供解析和设置JavaBean(主要是组件对象)属性机制用来查看和设置组件属性Control控件通常称作属性页在Swing可以通过表格JTable结合Renderer/Editor思想实现
今天文章先就Swing界面设计工具基本思想和技术做个简单概述后面将就这 3个方面技术在图形界面设计工具应用进行详细地描述
最新评论