快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
窗体,Region 不直接提供函数,只能通过坐标数组来实现。

如图所示,圆形是通过一组逆时针连接而成的点构成,各个点可以有园半径,圆心坐标推算而成。A1 的坐标是 (Xo-r, Yo). An 的 X 坐标是 XAn=Xo-r+n,Y 坐标是 YAn=Yo+R。

图 3. 园

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

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

生成圆形坐标数组的函数代码如下:

清单 2. 生成圆形坐标数组的函数代码

int[] circle(int r, int offsetX, int offsetY) {    int[] ring = new int[8 * r + 4];    // x^2 + y^2 = r^2    for (int i = 0; i < 2 * r + 1; i++) {     int x = i - r;     int y = (int) Math.sqrt(r * r - x * x);     ring [2 * i] = offsetX + x;     ring [2 * i + 1] = offsetY + y;     ring [8 * r - 2 * i - 2] = offsetX + x;     ring [8 * r - 2 * i - 1] = offsetY - y;    }    return ring;   }

有了这些定义图形的函数,我们就可以创建一个 Region 对象用于定义窗体的外形。首先我们定义一个缺省的 Region 对象,然后加入定义好的图形。这些图形可以叠加在一起形成多边形外形;也可以剔除一块图形。

下面是示例的完整代码。首先生成一个 Display 对象,然后用 Display 对象创建一个 Shell。注意需要定义成无装饰风格的窗口。再后就是创建 Region 对象来定义一个图形形状,通过 shell.setRegion 来设置窗口外形,最后是显示 Shell。Region 在使用完后必须要跟 Display 对象一样被释放。

清单 3. 示例的完整代码

public static void main(String[] args) {    final Display display = new Display();    final Shell shell = new Shell(display, SWT.NO_TRIM);    //    Region region = new Region();    region.add(getBackRect1());    region.add(getBackRect2());    //    region.subtract(circle(20, 400, 345));    //    shell.setRegion(region);    Rectangle size = region.getBounds();    shell.setSize(size.width, size.height);    //    shell.open();    while (!shell.isDisposed()) {      if (!display.readAndDispatch())        display.sleep();      }    region.dispose();    display.dispose();   }

通过运行这段代码,可以得到自己定义的多边形窗口界面。

图 4. 多边形窗口

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

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

Control(控件)多边形外形只有在最近的 Eclipse 版本支持该功能。下面代码是通过另外一种非常规的手段来实现多边形小部件的,通过图片来显示小部件边界。程序首先定义一个 BUTTON 按钮,然后设置按钮的图片,让按钮大小约大于图片。为了只让图片显示,而不显示按钮,我们需要创建一个 Region,设置相应的偏移,使 Region 刚好覆盖要显示的图片。

清单 4. 实现多边形小部件

Button startBt = new Button(shell, SWT.PUSH);   startBtRegion = new Region();   startBtRegion.add(circle(35, 40, 40));   ImageData startData = startBtImage.getImageData();   startBt.setRegion(startBtRegion);   startBt.setSize(startData.width+10, startData.height+10);   startBt.setLocation(575, 297);   startBt.setImage(startBtImage);   startBt.setToolTipText("Play media"); 

图 5. 多边形 Control

图 1.5 说明了其中原因,如果要创

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号