快速业务通道

定制SWT/RCP界面:如何编写一个漂亮的SWT/RCP界面 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
建一个圆形多边形按钮,我们首先要定义个圆形部分的 Region,然后设置偏移 X1,Y1,再后设置 button 的 Region 为我们创建的 Region。这样 Button 显示给我们的就是一个圆形的 Button。而且只有该圆形区域,按钮点击才有响应。

图 6. 圆形控件示意图

值得注意的是,如果不用图片,圆形的 button 没法显示相应的边界,用户很难分辨圆形按钮和父窗口,因而用处不大。如果想创建一个像 Button 的多边形按钮,我们需要继承 Button,重载图形绘制部分,自己绘制 Region 的边界以显示一个真正的多边形按钮。

多边形控件只有在 Eclipse3.4 中才开始支持,有对方面感兴趣的朋友可以自己实现多边形控件,然后定义几个特例,比如说圆形,环形等。如果运气好的话,说不定这些实现可能被 Eclipse 采纳。

定制SWT/RCP界面:如何编写一个漂亮的SWT/RCP界面(5)

时间:2012-02-26 IBM 饶有清

通过图片来定义窗口界面

在介绍通过图片来获得图形外形前,我们先介绍一下图像方面的一点基础知识。

在计算机里,图像是通过像素来显示的 , 像素也叫图像分辨率。正如 WIKI 里面定义的,像素是图像显示的基本单位,是英文单词 picture 和 element 的组合而成。一幅图像中的像素可以在任何尺度上看起来都不像分离的点或者方块;但是在很多情况下,它们采用点或者方块显示。每个像素可有各自的颜色值,可采三原色显示,因而又分成红、绿、蓝三种子像素(RGB 色域),或者青、品红、黄和黑(CYMK 色域,印刷行业以及打印机中常见)。照片是一个个采样点的集合,故而单位面积内的像素越多代表分辨率越高,所显示的图像就会接近于真实物体。

如下图所示,图像被定义成 N * M 个方格,每个方格表示一个像素。每个像素都有自己的颜色值。蓝色图像就是大量蓝色小方格组成的。

图 7. 像素示意图

在 SWT 中,图像模型是 ImageData,它用来保存图像信息,如图像高度,宽度以及像素相关信息; 它不像 Image,是一个设备无关类。目前 SWT 支持 JPG, PNG, BMP 等图片格式。在这里我们遍历整个图片,获取每个像素值,如果像素值不为 0,表示该像素位于图片内。这些点组成的图形,就是图片的图像。

清单 5. 代码

ImageData mask = data.getTransparencyMask();   Rectangle pixel = new Rectangle(0, 0, 1, 1);   for (int y = 0; y < mask.height; y++) {   for (int x = 0; x < mask.width; x++) {    if (mask.getPixel(x, y) != 0) {     pixel.x = data.x + x;     pixel.y = data.y + y;     region.add(pixel);    }   }   }

定制SWT/RCP界面:如何编写一个漂亮的SWT/RCP界面(6)

时间:2012-02-26 IBM 饶有清

SWT 中有很多种方法得到 ImageData 实例。可以通过 ImageData 的构造函数初始化一个 ImageData 实例;也可以通过 ImageLoader 来得到 ImageData 实例;还可以通过已有的 Image 对象来获得。

通过图片可以获得如下窗体外形:

图 8. 图像外形多边形窗口

清单 6. 示例全部代码

private static Region getBackRegionFromImage(Display display, String image){    ImageLoader loader = new ImageLoader();    ImageData[] imageData = loader.load(image);    Region region = new Region(display);    ImageData data = imageData[0];    ImageData mask = data.getTransparencyMask();    Rectangle pixel = new Rectangle(0, 0, 1, 1);    for (int y = 0; y < mask.height; y++) {      for (int x = 0; x < mask.width; x++) {        if (mask.getPixel(x, y) !=

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号