Aexi(2)

2024-08-24 00:32
文章标签 aexi

本文主要是介绍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进行重绘.今天就先写这么多.

这篇关于Aexi(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100937

相关文章

Aexi(5)-Glyph的事件处理

这次的博客主要实现这样一个功能,当点击文档中的某个点时,调整光标Caret的位置.          那么到底如何实现这样的功能呢?刚开始的时候我们肯定先考虑比较直接一点的方法.先使用一个controller类来接收鼠标点击事件.在相应的处理方法中可以拿到鼠标点击的坐标.然后遍历所有的page,row,basicGlyph来获得鼠标点击的具体图元,然后再去做具体的处理.

Aexi(4)-字体

已经好久都没有更新博客了,确实最近本大二狗学校里面的事情比较多,终于处理完了,下面更新博客的速度也会加快的.而且这个项目确实拖了比较长的时间了,我也给自己设置一个DeadLine吧.下月10号将PC平台上的Aexi完成,下月20号之前将其移植到Android平台上,并抽象出主要部分,封装成一个库发到Github上面.     下面就开始这次博客的内容,这次博客的主要想写一个开发过程中的小问题—字

Aexi计划

又是好久都没有发布新的博客了.从今天开始要提高更新博客的频率了,那么现在开始的博客都写一些什么呢?笔者准备写一个稍微大一点的项目,并在项目的每一个关键阶段将各个过程记录下来. 那么到底是什么样的一个项目呢? 我给这个项目取名叫Aexi.是的,相信看过《Design Pattern》这本书的朋友都应该知道了,这个名字来自于《DP》这本书的第二章中的对设计模式综合运用的一个实例——Lexi.笔者准