Aexi(2)

   今天主要完成了Aexi的Caret功能.

   那么什么是Caret呢?请看下图.


     对的,大家几乎每天都在和它打交道,这个闪烁的小光标就是传说中Caret.

     我们实现它的方案非常之简单.

         1. 首先,先封装一个Caret类,Caret内部有个成员变量isShow,有个drawMe()方法用于绘制自身.

          2. Caret内部开启一个线程每隔固定的时间改变该变量,并定义一个Listener接口与Caret所依附的view进行通信.

          3. 当该成员变量改变时,调用listener通知view重绘.

         4. 重写view的重绘方法,使其遵循一定的顺序,目前是先绘制了背景,然后调用Caret的drawMe()方法.这样当isShow为false时,drawMe()方法不会绘制任何东西.这样就实现了Caret的闪烁绘制.

     为什么这个功能需要自己实现呢,而不是通过继承已有的文字组件实现呢?这是因为每个平台的api都不会一样,为了保证移植时能够最小限度的修改代码,我们能够自己实现的功能都尽量自己实现.但是也有功能是可以不用自己实现的,比如菜单栏、功能条、toolbar这种,我们就可以依赖于swing框架来实现.因为这些功能是要跨平台的,现在只是做个简单演示,所以可以依赖于swing框架.

    现在的设计还比较简陋,我们可以做一些初步的优化.

    首先,定义接口Glyph.读过《DP》的读者应该知道这个接口用来描述文档中每个可视对象,我们的光标Caret同样也应该是Glyph的一种.暂且只定义一个方法drawMe();

    其次,还可以再定义一个Document类,作为View显示的顶层类.然后将Caret以及之后的Char等等的Glyph对象的请求逐级转发给上层,最终来到Document,由Document统一通知View进行重绘.今天就先写这么多.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值