快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
置每个工作台窗口的显示,如窗体风格、标题、工具栏、状态栏等。我们要实现多边形的 RCP 窗体,就是继承该类,重载其中的 postWindowCreate 和 createWindowContents 来实现的。

Eclipse 中的 OSGi 机制是通过 Equinox 来实现的。插件 org.eclipse.equinox.app 中定义了一个普通应用程序的启动的扩展点,Application 是它的一个扩展。下面是 RCP 启动的一个时序图:

图 11. RCP 启动时序图

Application 调用 PlatformUI.createAndRunWorkbench 来创建一个工作台 . 工作台 Workbench 调用 WorkbenchAdvisor 来设置相关信息,创建 WorkbenchWindow。 WorkbenchWindow 又通过 WorkbenchWindowAdvisor 来设置窗口的一些信息。重载 preWindowOpen 来设置窗体风格;重载 createWindowContents 来创建窗体内的部件,如菜单、工具栏、状态栏、WorkbenchPage 等;重载 postWindowCreate 来设置窗体大小、外形。

定制 RCP 窗体外形前,Shell 对象已经初始化,所以我们只能是在窗体创建后。设置 RCP 窗体外形跟前面的 SWT 程序一样简单,首先通过通过窗体配置参数获得当前窗体 Shell 的引用,然后定义一个外形 Region,使用这个外形设置窗体就成。

窗体中的部件的外形定制跟其他的 Control 一样,先创建图形,然后使用图形设置 Control 外形。需要注意的是我们需要定义好 Control 的位置,因为父子部件是一层层叠加的,最顶层的部件可能会覆盖其父部件的外形。

通过定制多边形外形,我们可以制作一个界面美观的媒体播放器 :

图 12. 媒体播放器

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

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

实例的部分代码如下:

public void preWindowOpen() {    getWindowConfigurer().setShellStyle(      SWT.NO_TRIM | SWT.CENTER | SWT.NO_BACKGROUND);   }

首先是在窗体打开前设置窗体的风格,没有边界,没有背景。

清单 7. 设置窗体风格

public void postWindowCreate() {    IWorkbenchWindowConfigurer configurer = getWindowConfigurer();    //    final Shell shell = configurer.getWindow().getShell();    backRegion = getBackRegionFromImage(shell.getDisplay(), backImage, 0, 0);    ImageData data = backImage.getImageData();    shell.setRegion(backRegion);    shell.setSize(data.x+data.width, data.y+data.height);    //    Listener listener = new Listener() {      int startX, startY;      public void handleEvent(Event e) {        if (e.type == SWT.MouseDown && e.button == 1) {          startX = e.x;          startY = e.y;        }        if (e.type == SWT.MouseMove && (e.stateMask & SWT.BUTTON1) != 0) {          Point p = shell.toDisplay(e.x, e.y);          p.x -= startX;          p.y -= startY;          shell.setLocation(p);        }         if (e.type == SWT.Paint) {          ImageData data = backImage.getImageData();          e.gc.drawImage(backImage, data.x, data.y);        }      }    };    shell.addListener(SWT.MouseDown, listener);    shell.addListener(SWT.MouseMove, listener);    shell.addListener(SWT.Paint, listener);    //   }

窗体创建后,程序通过读取图片信息获得图片的大小,多边形外形等信息,然后设置窗体的大小外

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