注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

隐龙 为了一生的信念

今日默默沉于水,他日飞腾在九天...

 
 
 

日志

 
 

Eclipse插件开发笔记四:Wizard与WizardPage  

2014-04-04 21:39:25|  分类: Eclipse PDE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在popupmenu中选中 一个菜单项时,我期望能够启动 一个wizard,进行简单的配置。

 

Eclipse PDT提供了NewWizard的模板,它是使用的org.eclipse.ui.newwizards扩展点;它在plugin.xml中定义了一个category和一个wizard。使用模板创建出来的插件必须要用new来启动,这不是我想要的。

 

查看Eclipseme和FatJar的源码,发现它们启动wizard用的都是同一种方式:

WizardDialog dialog = new WizardDialog(shell, this);

return (dialog.open() == Window.OK);

使用WizardDialog,将shell和Wizard对象的实例传入来构建WizardDialog后启动即可。

 

这也是NewWizard模板隐藏了的部分。

 

Wizard实现中需要注意的就是addPages方法,注意它还有一个addpage方法,两个方法之间是调用的关系;还有performFinish方法,当Wizard Finish后,这个方法会被调用;还有dialog.open(),如果Wizard以Finish结束,它是会返回OK的;如果被Cancel掉,则返回FALSE。

 

而WizardPage实现中的核心方法就是CreateControl了。这个CreateControl的实现很值得研究。因为,在这个方法中,要创建Page上面的很多控件,比如button、Text、Label;消息是怎么传递到这些控件的呢?

 

一般的实现方法是,先构建父容器,然后用父容器将这些控件add进去。我没有找到add,CreateControl用的是另外一种办法,就是在构建子控件时,直接将父容器的引入传递了进去。这个就是所谓的构建时传入。

AOC有三种方法,set、register和构建时传入,createControl用的是第三种。

这种方法就有点类似于WIN32里面的CreateWindow函数,其实就是把这些操作封装起来了。

 

CreateControl传入的父容器的引用是Composite类型的。它是org.eclipse.swt.widget包的一个类。它继承自Scrollable,而Scrollable继承自Control;

对Composite的定义是,一个能够容纳Control的Control。

 

在CreateControl中,并不是直接将传入的Composite作为父。而是构建一个composite,作为中间层。在createControl中的最后一句非常关键:setControl(comp);

  评论这张
 
阅读(370)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017