Eclipse插件開發筆記四:Wizard與WizardPage

在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);

 

 

 

發佈了145 篇原創文章 · 獲贊 4 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章