UI框架设计文档(初稿)

第一章.     需求

自定义组件需要完成两样基本任务:第一侦听并处理低层事件,根据具体情况改变组件状态,如需要还要发出高级事件;第二,根据当前组件的状态画出当前组件的外观

     侦听底层的事件是指侦听类似于mousekeyboardfocus等事件,然后处理此事件,如果发现此事件带有特定语义,表达某种组件行为,则改变当前的组件状态以记录,并触发某种事件通知应用程序进行处理。举例说明,想象你准备实现一个简单的按钮,你可以通过继承JComponent来完成。你可以在按钮初始化时,注册此按钮的鼠标事件侦听器,以侦听发生自己组件上的鼠标事件。当按钮捕获到鼠标按下时,检查鼠标按下的点是否在按钮有效区域内。如果是,则认为当前是一个按钮按下动作,那么改变按钮的状态为按下去,调用repaint方法通知按钮重画成按下去的状态,然后发出 ActionPerformed的事件,通知注册在此按钮上的应用程序的ActionListener处理这个动作

 

第二章.     UI框架体系的概念

第一节       UI只是图形化界面的展示层(包含数据显示逻辑),不包括复杂的应用逻辑与访问数据库的功能

第二节       实现各种应用不同的UI 是一件复杂而又费时的工作。但每种具体UI 之间又有诸多相同之处, UI 的形态、样式、要素、数据处理逻辑等。为了统一UI 风格, 统一编码规范, 简化具体UI 的实现过程, 我们把UI 通用部分进行抽象, 封装成统一的UI 底层平台, 具体UI 的实现是程序员在这一平台上完成的, 此平台我们称之为UI Framework(UI 框架体系)

第三节       UI Framework是具体UI实现的基础,它对UI通用的形态,样式,要素,行为进行了统一的规划,定义,约束与描述。并且阐明了整个UI设计,内部对象之间的协作依赖关系,责任分配和流程控制,行程一个系统的可重用的底层UI框架平台,是具体UI实现者定制的应用骨架。一遍编程人员采用统一的标准与规范,复用组件,快速实现出风格统一,功能各异,人性化的人家交互界面

第四节       UI FrameWork的组成

1.         UIManager:所有UI程序显示的统一窗口,整个UI层最核心的部分,是UI层的管理和行为调度者,也就是说UI的形态,样式,行为动作都由UIManager 来管理调度实现。设计这一个概念是为了让这个公共的窗口来统一界面的风格,窗口内容的布局,统一响应菜单命令,调度处理窗口内容中显示的数据集。这简化了UI的实现,使实现者只关注UserUI部分的实现,其他部分由UIManager按照既定的逻辑来完成。(仿照J4MEUIManager)

2.         UserUI:应用界面,最终显示在UIManager内容区域中的可视化图形部分。用来装载窗口控件,并完成数据的显示和数据的采集。UserUI的设计目标是一个负责显示可视化的UIbean,没有数据处理的逻辑与流程的概念,并且如果不同应用程序如果显示的界面表现相同,可以共有一个UIbean ( 原来的ItemCanvas )(当软键菜单出现的时候,背景只是上一次绘画内容的一张图片,只有当软键菜单消失之后,才会重新绘画这些控件)

3.         UI DelegateUI Delegate负责从UserUI的模型获取数据并渲染到屏幕上去;UI Delegate对象可以在运行的时候动态替换,这就使具备了可插拔的外观(Pluggable Look-And-Feel, PLAF)

4.         UIMain负责处理窗口中的数据集的非可视化部分的程序,UIManager调用UIMain的具体方法来实现应用数据处理(联网逻辑,解析等)

5.         UITookit:窗口控件,是嵌入在UserUIPanel里面允许的各种控件,如文本框,下拉框,单选框,表格等控件,用来录入或者显示数据 (原来的Item)

6.         DataB:数据类,对实际应用数据集的封装

具体分析:

( 1) UIWindow 是整个UI 层的管理与行为调度者。addMts方法实现界面的菜单、工具栏、状态栏的加载与应用; initListener方法用来加载界面事件的监听列表。doMain 方法是UIWindow调用UIMain 方法的统一入口。其中setContent 方法调用UIMaingetContentUI 方法获得UserUI 的实例来加载可视化的应用界面; dealDataB 方法处理UserUI 传入的应用数据; 通过saveupdateremove 等方法调用UIMain 里同名方法实现应用数据的增、删、改、查等逻辑处理。

( 2) UIMain 实现了应用数据增、删、改、查等处理方法, 而且提供了用户功能扩展的标准接口, 以便UIWindow 通过doMain方法统一调用。

( 3) UserUI 是一个负责显示应用数据的可视化Beanget-Component 方法实现了窗口控件的加载; handUILayout 方法用来管理窗口控件布局; initial 方法用来初始化应用界面的缺省值;datasStore 方法把窗口控件的值封装成应用数据( dataB) , 然后通过setCurrentDataB 方法传给UIMain, 以便UIWindow 进行逻辑处理; getCurrentDataB 方法获取UIWindow 传给UIMain 的后台查询应用数据( dataB) , 然后通过datasLoad 方法显示到应用界面上的窗口控件。

( 4) DataB 是应用数据的集合类, UIWindowUserUI 类的属性。

第三章.     事件模型

组件在侦听到原生事件并处理后,往往产生新的逻辑事件。逻辑事件是某些组件所特有的、具有特定语义的事件,和原生事件不同,它们并不被派发到系统事件队列中,而是由组件直接触发。事件处理器作为组件的观察者添加到组件上并侦听触发的事件。

  例如new JscrollPane(new JtextArea())这个系统,它里面包括两个JScrollBar和一个JTextArea,当鼠标拖动事件触发JScrollBar时,JScrollBar处理了这个鼠标拖动事件,并发出滚动条拖动事件,这个事件传播给JTextAreaJTextArea处理这个拖动事件,相应的更新自己显示的内容,如果JTextArea之后又根据更新发出了一个新的事件,这个事件便会继续传播下去。

第四章.     实现可插拔外观

这些可插拔LAFAPI包括:

·         UserUI类中的钩子

·         LAF管理的顶层API

·         独立的包中实际实现LAF的接口

 

第五章.     复合组件绘画

使用Render渲染器

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值