实在看不下去了,现在的孩子怎么一点常识也没有啊,Eclipse本身就是基于SWT的,没见过猪跑还没吃过猪肉吗?没听说过Eclipse的发展历史还没读过源码吗?…… 要知道,Eclipse本身就是IBM捐献出的项目(IBM早期对它已经投入超过四千万美元后才发布(PS:很大一部分是由于财政问题导致开源),目前由Eclipse基金会管理),早期结构大量借鉴了IBM的Visual Age for Java(大学毕业后再没用过这货,当时还没有Eclipse,但总体感觉超像),而SWT最早就是为了进行Eclipse开发才研制(附带)的图形技术之一(IBM那群人死瞧不上AWT/Swing)。 实际上,它的本质与AWT几乎一致,都采用原生窗口部件进行组件显示(另外Swing虽然依附于AWT,但它仅有底层Frame是实际的原生窗体,自JFrame开始就全部利用渲染技术绘制窗体(每个操作系统的渲染手段都不尽相同,比如在Windows环境根据底层具体实现不同,可能使用GDI、OpenGl、Directx等不同手段进行组件绘制)。更简单的说,你在Windows下可以轻易获得AWT或SWT的原声组件句柄,继而就可以从外部强制对应某一句柄的某一按钮执行或失效,而Swing上的组件由于是“画”出来的,所以也就没法强制从外部操作(当然,模拟鼠标点击可以,因为会被主窗体的事件监听截获)。 但是,SWT比AWT先进的地方在于,它采用了一种折中方式,当创建Java组件时,SWT首先会尝试通过JNI来访问原生窗口部件,也就是类似于AWT的方式,可如果在该环境上无法找到这一个窗口部件,SWT却不会犯傻不创建,而是会自动地模拟出本地风格(只要创建了对应风格),从而保证SWT的正常运行。 所以SWT的组件并不一定是原生的,也不一定是仿生的,而是动态自适应的,风格可调的(这意味着你在SWT上也可以绘制新组件,你搜一下上述文字应该能找到相关文章)。 PS:顺带一提,Sun也对IBM这种方式同样死不对眼,不过Oracle可能要往这方面走。