Live a simple life

沉默(zhu_xing@live.cn)
随笔 - 48, 文章 - 0, 评论 - 132, 引用 - 0
数据加载中……

【Eclipse插件开发】闲侃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的源码质量都是很高很高的,可以经常撒两眼~_~

        欢迎拍砖!


本博客中的所有文章、随笔除了标题中含有引用或者转载字样的,其他均为原创。转载请注明出处,谢谢!

posted on 2008-09-01 17:23 zhuxing 阅读(6966) 评论(6)  编辑  收藏 所属分类: Eclipse Plug-in & OSGI

评论

# re: 【Eclipse插件开发】闲侃AWT、SWING、SWT、JFACE  回复  更多评论   

感觉搞图形编程,一定要把最成功的Win32 API用一下,会有很多的收获,特别是对于事件处理和GC。

Swing框架与代码很优美,但一是效率低,特别是高级控件如各种选择框超慢,与Windows本身不协调,使用体验差;二是再怎么使用lookandfeel,还是不美观,总是感觉画的不清晰,可能缺少Windows的GDI优化吧。

MVC模式在MFC时代就展现的十分完美,比Swing和JFace强大许多。
2008-09-01 23:11 | Always BaNg.

# re: 【Eclipse插件开发】闲侃AWT、SWING、SWT、JFACE  回复  更多评论   

发现博主最爱东拼西凑。。。无聊
2008-09-02 11:45 | tomay

# re: 【Eclipse插件开发】闲侃AWT、SWING、SWT、JFACE  回复  更多评论   

@tomay
谢谢你的指教
2008-09-02 12:09 | zhuxing

# re: 【Eclipse插件开发】闲侃AWT、SWING、SWT、JFACE  回复  更多评论   

分别在 AWT、SWING 和 SWT 的文本输入框中点一下右键,你就知道哪个是描绘出来的,哪个是直接取用操作系统的。

为何把 AWT 的控件叫做重量级的,而 SWING 的控件多数为轻量级的,就因为 AWT 的控件有一个操作系统对等的东西,AWT 是在赶工的情况下完成的。

SWING 并没有多少是基于 AWT 的,除了 AWT 中的事件类。我喜 SWT,因为他的使用于 MFC 比较相仿。
2008-09-02 13:34 | 隔叶黄莺

# re: 【Eclipse插件开发】闲侃AWT、SWING、SWT、JFACE  回复  更多评论   

同意楼上所说的AWT是重量级组件,交由对应的peer调用操作系统绘制.

应拿swt,jface与awt,draw2d与swing才具可比性.
优劣看你的应用.
swt,jface,再加上uiforms控件,还一些开源控件,这是远比awt控件丰富.
draw2d的控件与swing控件相比,又少的多的多.
至于速度,看写程序
swt,与jface有些人很容易把内存用尽.像控件,color,image,Font有人总是忘记用了去dispose.我虽然做了几年eclipse界面开发,但我还是喜欢swing,比如易于测试.
2008-11-26 16:21 | jst designer

# re: 【Eclipse插件开发】闲侃AWT、SWING、SWT、JFACE  回复  更多评论   

无聊···
2010-08-13 09:00 | 爱爱爱

只有注册用户登录后才能发表评论。


网站导航: