快速业务通道

使用Eclipse RCP进行桌面程序开发(五):2D绘图 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

使用Eclipse RCP进行桌面程序开发(五):2D绘图

时间:2011-04-13 海边沫沫

看完这篇文章,可以实现如下界面:

使用Eclipse RCP进行桌面程序开发(五):2D绘图 - 编程入门网

使用Eclipse RCP进行桌面程序开发(五):2D绘图 - 编程入门网

当我第一次看到RCP的时候,我就梦想着有一天能够用它开发界面华丽的2D和3D程序,经 历过前面的探索,今天终于可以揭开2D绘图的神秘面纱。在包资源管理器的插件依赖项中, 我们一眼就可以看到org.eclipse.swt.graphics包,毫无疑问,和2D绘图有关的类就在这个 包中。还有一个org.eclipse.swt.opengl包也很引人注目,但是里面却只有GLCanvas类和 GLData类,怎么也找不到传说中的GL类和GLU类,也许下一篇文章我会写出关于3D的内容,但 也许这个计划会夭折。

我刚开始发现org.eclipse.swt.graphics包的时候,要使用包里面的类却不是那么容易。 比如,从名称上可以看出Image类是处理图像的,但是它的构造函数无一例外都需要一个 Device参数,于是,我迷惑了,Device,我该如何取得?再比如,GC类里面含有各种绘图的 方法,但是GC的构造函数需要Drawable参数,那Drawable我又该如何获得呢?

于是,我在网上搜索关于SWT 2D方面的内容,终于,让我看到了别人这样构造Image和GC :

Image img = new Image(display,"pic.gif");

GC gc = new GC(Image);

你能看出什么?为什么display是Device的子类?为什么Image是Drawabe的子类?最简单 的办法,使用Eclipse的类层次结构视图查看:

使用Eclipse RCP进行桌面程序开发(五):2D绘图 - 编程入门网

使用Eclipse RCP进行桌面程序开发(五):2D绘图(2)

时间:2011-04-13 海边沫沫

高,实在是高,在这里我不得不佩服SWT的设计者,在一开始,他们就把所有的控件都设 计为可绘制的,而且使用Device来抽象绘图的设备。从图中可以看出,所有的控件都实现 Drawable接口,Image也实现Drawable接口,而Device的子类Display和Printer刚好分别代表 了屏幕和打印机。所有的谜团都在这里解决了,我们可以使用任何控件作为GC构造函数的参 数来构造GC,然后绘图,而所有需要Device参数的地方,我们可以根据我们需要输出的设备 是显示器还是打印机而分别选择Display或Printer。

在org.eclipse.swt.widgets包中,有一个Canvas类,不难看出,如果我们要绘图,这个 控件是最佳选择了。在下面的代码中,我们可以通过选择不同的菜单,分别绘制椭圆,矩形 ,填充渐变色的矩形和一个图像,运行效果就是文章开头的图片。

视图CanvasView.java

package cn.blogjava.youxia.views; 2 3 import org.eclipse.swt.widgets.Composite; 4 import org.eclipse.ui.part.ViewPart; 5 import org.eclipse.swt.widgets.Canvas; 6 import org.eclipse.swt.SWT; 7 import org.eclipse.swt.events. * ; 8 import org.eclipse.swt.graphics.Image; 9 import org.eclipse.ui.PlatformUI; 10 11  public  class CanvasView extends ViewPart  { 12 13   public Canvas canvas; 14   @Override 15    public  void createPartControl(Composite parent)  { 16     // TODO 自动生成方法存根 17     canvas =  new Canvas(parent,SWT.NONE); 18       } 19 20   @Override 21    public  void setFocus()  { 22     // TODO 自动生成方法存根 23 24   } 25 26 } 27

菜单项绘制椭圆DrawOvalAction.java的关键部分:

1  public  void run(IAction action)  { 2     // TODO 自动生成方法存根 3     IViewReference[] vfs = window.getActivePage().getViewReferences (); 4     IViewPart vw; 5      for ( int i = 0 ; i < vfs.length; i ++ ) { 6       vw = vfs[i].getView( false ); 7        if (vw.getTitle().equal

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