大多数 Java 开发人员同意 Swing/AWT 只有
![](/icons/99452yi.gif)
个方面强于 Eclipse 平台
![](/icons/99452de.gif)
标准窗口小部件工具箱(Standard Widget Toolkit)
![](/icons/99452dou.gif)
这就是 Java 2D
![](/icons/99452dou2.gif)
直到现在仍然没有容易
![](/icons/99452de.gif)
思路方法将 Java 2D
![](/icons/99452de.gif)
快捷性能和 SWT 用户界面组件
![](/icons/99452de.gif)
更强
![](/icons/99452de.gif)
可移植性、功能和性能集成到
![](/icons/99452yi.gif)
起
![](/icons/99452dou.gif)
但是这
![](/icons/99452yi.gif)
点就会改变了
![](/icons/99452dou2.gif)
这本文中
![](/icons/99452dou.gif)
向大家展示了在 SWT 组件和 Draw2D 图形中绘制 2维图像有多容易
![](/icons/99452dou2.gif)
SWT (标准窗口小部件工具箱
![](/icons/99452dou.gif)
Standard Widget Toolkit)是在 Eclipse 平台上使用
![](/icons/99452de.gif)
窗口小部件工具箱
![](/icons/99452dou2.gif)
它也可以作为 Swing/AWT
![](/icons/99452de.gif)
![](/icons/99452yi.gif)
个重要替代产品
![](/icons/99452dou.gif)
用于构建任何类型
![](/icons/99452de.gif)
Java GUI 应用
![](/icons/99452chengxu.gif)
![](/icons/99452dou2.gif)
随着 Eclipse 平台在过去两年里
![](/icons/99452de.gif)
日趋流行
![](/icons/99452dou.gif)
SWT 已经进入大家
![](/icons/99452de.gif)
视线
![](/icons/99452dou.gif)
并且最近它已经开始在
![](/icons/99452yi.gif)
些应用
![](/icons/99452chengxu.gif)
中取代 Swing/AWT
![](/icons/99452dou2.gif)
SWT
![](/icons/99452de.gif)
流行源自这样
![](/icons/99452yi.gif)
个事实:它是跨平台
![](/icons/99452de.gif)
工具箱
![](/icons/99452dou.gif)
利用了窗口小部件
![](/icons/99452de.gif)
本性
![](/icons/99452dou.gif)
并有
![](/icons/99452yi.gif)
个和 Swing 及其他现代工具箱同样强大
![](/icons/99452de.gif)
功能
![](/icons/99452dou2.gif)
使用 SWT
![](/icons/99452dou.gif)
就不用在可移植性、功能和性能的间做取舍了
![](/icons/99452dou2.gif)
事实上
![](/icons/99452dou.gif)
Swing/AWT 只在
![](/icons/99452yi.gif)
个方面明显强于 SWT
![](/icons/99452dou.gif)
这就是 Java 2D
![](/icons/99452dou2.gif)
Java 2D 是
![](/icons/99452yi.gif)
个强大
![](/icons/99452de.gif)
API
![](/icons/99452dou.gif)
是在 JDK 1.2 中引入
![](/icons/99452de.gif)
![](/icons/99452dou2.gif)
它使 Java 开发人员在 AWT 组件上绘制时可以使用复杂
![](/icons/99452de.gif)
2维变换(平移、旋转、缩放、错切等)
![](/icons/99452dou2.gif)
不幸
![](/icons/99452de.gif)
是
![](/icons/99452dou.gif)
Java 2D 设计为只在 AWT 或者 Swing 工具箱上使用
![](/icons/99452dou.gif)
而 SWT 还没有提供这种扩展
![](/icons/99452de.gif)
2维能力
![](/icons/99452dou2.gif)
因此
![](/icons/99452dou.gif)
许多开发人员发现他们必须选择是在 Java 平台上使用 Java 2D 还是放弃它令人兴奋
![](/icons/99452de.gif)
功能而使用 SWT
![](/icons/99452dou2.gif)
不过
![](/icons/99452dou.gif)
在本文中您将了解到如何同时拥有这两方面
![](/icons/99452de.gif)
好处
![](/icons/99452dou2.gif)
我将展示
![](/icons/99452yi.gif)
个简单
![](/icons/99452de.gif)
技术
![](/icons/99452dou.gif)
利用该技术可以在 SWT 组件和 Draw2D 图像上绘制 Java 2D 图像
![](/icons/99452dou2.gif)
为了理解这个例子
![](/icons/99452dou.gif)
读者应当熟悉 Java 2D、AWT 和 SWT
![](/icons/99452dou2.gif)
具有
![](/icons/99452yi.gif)
些 Eclipse 平台
![](/icons/99452de.gif)
GEF(图形编辑框架
![](/icons/99452dou.gif)
Graphical Editing Framework)
![](/icons/99452de.gif)
经验也是有帮助
![](/icons/99452de.gif)
![](/icons/99452dou2.gif)
屏外图像技术
本文展示
![](/icons/99452yi.gif)
种简单
![](/icons/99452de.gif)
技术
![](/icons/99452dou.gif)
利用该技术
![](/icons/99452dou.gif)
您可以用 Java 2D 功能在任何 SWT 窗口小部件或者 Draw2D 图像上绘制
![](/icons/99452dou2.gif)
为了弥补 SWT 上缺少 Java 2D
![](/icons/99452de.gif)
不足
![](/icons/99452dou.gif)
用
![](/icons/99452yi.gif)
个屏外(offscreen)AWT 图像接收 Java 2D 绘制操作
![](/icons/99452dou.gif)
并将它们转换为独立于工具箱
![](/icons/99452de.gif)
像素值
![](/icons/99452dou2.gif)
再用另
![](/icons/99452yi.gif)
个由 SWT 工具箱创建
![](/icons/99452de.gif)
屏外图像将这些像素信息绘制在任何 SWT 组件上
![](/icons/99452dou2.gif)
图 1 显示了 AWT 屏外图像转换为 SWT 图像再绘制在 SWT 窗口小部件上
![](/icons/99452de.gif)
过程
![](/icons/99452dou2.gif)
![](http://www.crazycoder.cn/WebFiles/20091/fba361e6-f28c-4b07-8890-7005a1e2c059.g<img src='/icons/99452if.gif' />)
图 2. 从 AWT 图像中提取像素值 在这种情况下
![](/icons/99452dou.gif)
不使用任何 off
![](/icons/99452set.gif)
![](/icons/99452dou.gif)
这意味着第
![](/icons/99452yi.gif)
个像素将保存在缓冲区索引 0
![](/icons/99452de.gif)
位置
![](/icons/99452dou2.gif)
scansize
![](/icons/99452de.gif)
值取要提取
![](/icons/99452de.gif)
区域
![](/icons/99452de.gif)
宽度
![](/icons/99452dou.gif)
这意味着提取
![](/icons/99452de.gif)
![](/icons/99452yi.gif)
行中
![](/icons/99452de.gif)
第
![](/icons/99452yi.gif)
个像素会接着前
![](/icons/99452yi.gif)
行
![](/icons/99452de.gif)
最后
![](/icons/99452yi.gif)
个像素
![](/icons/99452de.gif)
缓冲区位置
![](/icons/99452dou2.gif)
使用这些参数
![](/icons/99452dou.gif)
整数
![](/icons/99452de.gif)
缓冲区就
![](/icons/99452yi.gif)
定会足够大
![](/icons/99452dou.gif)
可以包含 w*h 个整数
![](/icons/99452dou2.gif)
当每
![](/icons/99452yi.gif)
个像素
![](/icons/99452de.gif)
颜色信息都存储到了
![](/icons/99452yi.gif)
个整数
![](/icons/99452de.gif)
简单缓冲区后
![](/icons/99452dou.gif)
就可以将这些信息传输到 SWT 屏外图像中
延伸阅读
最新评论