闲侃AWT、SWING、SWT、JFACE

 还记得大学里给别人当廉价劳动力(做点小项目,改善点生活~_~)的时候用了不少AWT、SWING,当时也没有太多去想(当然也没有丝毫能力去乱想),就是单纯地当API来用。工作之后,一直做插件开发,也接触了SWT、JFACE,当然,经验也谈不上丰富,平时很少写界面UI的东西。今天闲着,就闲侃一下。
    
        【AWT和SWT】
        众所周知,AWT和swt实现原理是不一样的:AWT控件相当于是一笔一画绣出来的,参加 java.awt.Component.paint(Graphics g),性能可想而知了;而SWT中呢,是调用了操作系统后台原生库,org.eclipse.swt.widgets.Control类型中就没有类似的paint方法了,但是有一个接口 org.eclipse.swt.graphics.Drawable,有兴趣的TX可以看一下。 实现原理的不同带来了性能和用户视觉的差异,也就决定了AWT在某些应用场景下会被抛弃,SWT会被宠幸。
        
        【SWING和JFACE】
        SWING是基于AWT提供的MVC不完全实现,JFACE是基于SWT提供的MVC不完全实现,两个小框架出来了。底层的AWT和SWT的取舍决定了是选择SWING还是JFACE,虽然这样,我们还是看一下两者的主要差别和主要特点(个人意见、仅供参考)
        1、两者的核心作用都是提供了viewer和模型封装的概念,尽管如此,从设计实现上面讲,SWING更加唯美一些,JFACE则更加侧重于实用
        2、SWING和JFACE两者都偏重于行为控制上下文,而对UI数据(例如,一个文本框控件中的内容)的管理都没有做太多的设计。JFACE中略有改进,那就是提供了setData的概念,但是不好用~_~。其实说白了为什么没有做这些的设计,估计是想把自由度开发给开发者,不想做过多的限制,毕竟SWING和JFACE两个框架的核心就是去封装底层控件。这间接给UI测试带来了一些困难,设想如果没一个Dialog都有一个数据池的概念,用户的输入会放入这个数据池,到dialog finish的时候,就从这个数据池中取数据,不再取访问控件去数据,那么这样在UI测试的时候可以更方便的去处理数据,很多时候不用去过多的利用键盘钩子的东东
        3、JFACE是为了Eclipse而生的,虽然后来RCP出来了,又做了其他的包装宣传,典型的体现就是提供了JFace Text Framework和其他一些用户构建Eclipse元素的UI支持。当然,也提供了一些系统资源管理(ImageRegsitry、ResourceManager等)等附加功能。
        4、SWING和JFACE都是提供了一个小框架,而且是MVC的不完全实现,并不是旨在解决UI创建的所有问题。当然,SWING相比JFACE来说更优雅一些,更mvc一些  

        【性能差距真那么大吗?】
        不完全是。看看人家SUN的高手用AWT和SWING做的IDE工具,有那么差吗???为什么我们一般开发者用AWT和SWING做出来的UI,效果就差不少呢???水平,SUN牛!!!
        
        
        【核心是什么】
        我们在接触这些东西的时候,最核心的在于什么。个人感觉如下:
        1、基本机理,例如控件如何产生的、事件循环怎样的、涉及到线程问题..
        2、SWING和JFACE的MVC思想,本质中的本质。
        3、JFACE提供的一些Eclipse特性的东西,例如JFace Text Framework、资源管理等

        PS:SWING和JFACE的源码质量都是很高很高的,可以经常撒两眼~_~

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14734416/viewspace-440430/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14734416/viewspace-440430/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值