




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
引言Eclipse 具有豐富的菜單功能,給開發(fā)人員提供了很好的用戶體驗??傮w而言,Eclipse 菜單種類包括視圖 / 編輯器菜單,主菜單(Main Menu),視圖 / 編輯器菜單(ViewPart/EditorPart Menu)和上下文菜單(Context Menu)。插件開發(fā)人員通過靈活應(yīng)用這些菜單,可以給用戶提供很好的體驗。由于視圖和編輯器菜單功能類似,因此本文重點講述視圖菜單(視圖下拉菜單及其工具欄菜單),除此之外,還將講述主菜單和上下文菜單。如圖 1 所示為 Project Explorer 視圖的菜單,包括視圖下拉菜單和工具欄菜單(折疊樹節(jié)點)。通常而言,出現(xiàn)在視圖工具欄的菜單都會出現(xiàn)在視圖的下拉菜單,也就是說,比較常用的視圖菜單放在視圖的工具欄。圖 1. Project Explorer 視圖的菜單如圖 2 所示為 Project Explorer 視圖中的上下文菜單,只有當(dāng)我們右鍵點擊時才會出現(xiàn)。通常而言,出現(xiàn)頻率較高的菜單項才會出現(xiàn)在菜單中。上下文菜單具有很強的靈活項,它可以隨著我們點擊的對象不同,彈出的菜單也會有相應(yīng)的變化。圖 2. Project Explorer 視圖中的上下文菜單如圖 3 所示為 Eclipse 的主菜單,包括最上面的主菜單項(不可移動)及其下面的工具欄菜單(可以移動,并且 Eclipse 提供了顯示 / 不顯示這些菜單的功能),Eclipse 并不建議我們?yōu)槊恳粋€插件都添加新的主菜單,這樣容易造成冗余,而且不方便用戶操作。通常,我們可以把菜單項添加到 Eclipse 已有的菜單,如插件的查找功能可以添加一個查找菜單項到 Eclipse 的 Search 主菜單上。圖 3. Eclipse 的主菜單前面講到 Eclipse 的各種菜單,那么,如何在開發(fā)插件或 RCP 應(yīng)用程序的時候添加這些菜單?本文下面的篇幅將詳細介紹如何擴展 Eclipse 的菜單功能,使讀者深入了解 Eclipse 的菜單功能,并能夠開發(fā)具有這些菜單的應(yīng)用程序。因此,必須掌握三方面的內(nèi)容:菜單種類,菜單的擴展點,菜單控制(顯示 / 隱藏或啟用 / 禁用菜單項)。下面從概念上介紹這三方面內(nèi)容,下一小節(jié)將會進行詳細介紹。菜單種類正如前面所講到的,Eclipse 的菜單包括視圖菜單,主菜單及上下文菜單三個種類。菜單項的擴展點Eclipse 提供了兩種擴展點供用戶添加菜單項到相應(yīng)的位置。這兩種擴展點為 mands(本文簡稱為 Commands 方式)和 org.eclipse.ui.actionSets(本文簡稱為 Actions 方式)。Actions 方式為界面上不同區(qū)域的表現(xiàn)方式提供了相應(yīng)的擴展點,并且沒有分離其界面表現(xiàn)和內(nèi)在實現(xiàn)。恰恰相反,Commands 方式通過三步有效的達到界面表現(xiàn)和內(nèi)部實現(xiàn)的分離:首先,通過 mands 擴展點創(chuàng)建命令和類別(Category),并且可以把某些命令放在一個類別(Category)中;然后,通過 org.eclipse.ui.menus 指定命令出現(xiàn)在界面的哪個區(qū)域(視圖菜單 / 主菜單 / 上下文菜單);最后通過 org.eclipse.ui.handlers 指定命令的實現(xiàn)。因此,Eclipse 推薦新開發(fā)的插件使用 Commands 來創(chuàng)建您的界面菜單。當(dāng)然,由于 Actions 在現(xiàn)有的插件中用得比較多,如果我們需要擴展或基于之前的插件開發(fā),也需要對其進行了解。除此之外,針對上下文菜單,雖然 Commands 和 Actions 方式均可以創(chuàng)建上下文菜單,但是 Eclipse 還提供了另外一種創(chuàng)建上下文菜單的擴展點 org.eclipse.ui.popupMenus(本文簡稱為 popupMenus 方式),本文將就這三種擴展點做詳細的介紹。菜單控制菜單控制是一個非常常見的功能,例如,隨著選定的內(nèi)容或當(dāng)前窗口的不同,菜單中的菜單項會有相應(yīng)的變化(顯示 / 隱藏或啟用 / 禁用菜單項),因此,如何控制菜單是插件開發(fā)人員必須掌握的知識。Eclipse 為菜單控制提供了兩種方法,一種是通過擴展點;另一種是通過 API 的方式編寫程序控制。回頁首Eclipse 菜單功能及其擴展點至此,我們對 Eclipse 菜單有了感觀的認(rèn)識。由上一節(jié)我們可知,要深入理解 Eclipse 菜單功能,我們需要從三個方面去掌握:菜單種類,菜單的擴展點和菜單控制。下面將進行詳細講述。菜單種類針對各種菜單,Eclipse 提供了相應(yīng)的擴展點,因此,開發(fā)人員可以通過這些擴展點把菜單放到界面的不同區(qū)域,詳細內(nèi)容請參考 2.2 小節(jié)。菜單的擴展點視圖菜單的擴展點采用 Commands 方式創(chuàng)建視圖菜單,需要引入 org.eclipse.ui.menus 擴展點;而 Actions 方式需要引入 org.eclipse.ui.actionSets.1、視圖菜單(Commands 方式):MenuContribution locationURI = “Scheme:id?argument-list”其中,Scheme 為該菜單項出現(xiàn)的區(qū)域,menu 為視圖的下拉菜單,toolbar 為視圖的工具欄菜單;id 為菜單區(qū)域 ID;argument-list 為該菜單項出現(xiàn)在指定菜單的位置。例如:在 ProbelmView 的下拉菜單加一個菜單項,其 MenuContribution 的 locationURI 應(yīng)為:menu:org.eclipse.ui.views.ProblemView?after=additions;在 ProblemView 的工具欄菜單中加入一個菜單項,其 locationURI 應(yīng)為:toolbar:org.eclipse.ui.views.ProblemView?after=additions。2、視圖菜單(Actions 方式):采用 Actions 方式創(chuàng)建菜單,需要引入 org.eclipse.ui.actionSets 擴展點,并通過設(shè)定 action 的 menubarPath 指定下拉菜單 / 菜單項出現(xiàn)的位置;通過設(shè)定 action 的 toolbarPath 設(shè)定工具欄菜單 / 菜單項出現(xiàn)的位置。例如,添加一個下拉菜單項到 Problems 視圖中,其 menubarPath 應(yīng)為:org.eclipse.ui.views.ProblemView/additions主菜單的擴展點1、主菜單(Commands 方式)通過 Commands 方式把菜單項添加到主菜單及其工具欄上,和視圖菜單一樣,也是通過擴展點 org.eclipse.ui.menus 實現(xiàn),需要設(shè)定其 menuContribution 的 locationURI。例如,添加一個菜單(菜單可以包含若干個菜單項)到主菜單一欄中,其 locationURI 為:menu:org.eclipse.ui.main.menu?after=additions添加一個菜單到工具欄之中,其 locationURI 為:toolbar:org.eclipse.ui.main.toolbar?after=additions當(dāng)然,我們也可以把菜單項添加到已經(jīng)存在的菜單當(dāng)中,例如添加一個菜單項到 Eclipse 的 Search 主菜單當(dāng)中,其 locationURI 為:menu:org.eclipse.search.menu?dialogGroup2、主菜單(Actions 方式)通過 Actions 方式把菜單項添加到主菜單及其工具欄上,和視圖菜單一樣,也是通過擴展點 org.eclipse.ui.actionSets 實現(xiàn),需要設(shè)定 action 的 menubarPath 和 toolbarPath 實現(xiàn)。例如,添加一個菜單項到 Eclipse 的 Search 主菜單中,其 menubarPath 應(yīng)為:org.eclipse.search.menu/dialogGroup注意:如果采用上述方式添加一個菜單項到 Search 主菜單,當(dāng)我們運行時并沒有出現(xiàn)添加的菜單項,這時候需要換一個 workspace,其原因是 Eclipse 緩存了與其相關(guān)的某些信息在 workspace 當(dāng)中。上下文菜單的擴展點上下文菜單除了通過 Commands 和 Actions 方式添加,還可以使用擴展點 org.eclipse.ui.popupMenus 方式添加,下面分別進行介紹。1、上下文菜單(Commands 方式)Commands 方式與添加視圖菜單和主菜單的方式一樣,通過設(shè)定其 menuContribution 的 locationURI 來實現(xiàn)。例如,添加一個上下文菜單到 Problems 視圖中,其 locationURI 為:popup:org.eclipse.ui.views.ProblemView?after=additions。如果我們想讓某個上下文菜單項出現(xiàn)在任何區(qū)域,則可以使用下面的 locationURI:popup:org.eclipse.ui.popup.any?after=additions2、上下文菜單(Actions 方式)Actions 方式?jīng)]有直接提供擴展點添加上下文菜單,但是我們可以通過編程的方式實現(xiàn),如下代碼清單 1 為 TreeViewer 添加上下文菜單,通過 IMenuManager 的 add 方法添加 actions。清單 1. 通過 Actions 方式編程實現(xiàn)添加上下文菜單 private void hookContextMenu() IMenuManager fMenuMgr = new MenuManager(“#PopupMenu”); fMenuMgr.setRemoveAllWhenShown(true); / 添加 Actions fMenuMgr.add(action ) fMenuMgr.createContextMenu(treeViewer.getControl(); treeViewer.getControl().setMenu(fMenu); getSite().registerContextMenu(fMenuMgr, treeViewer); 3、上下文菜單(popupMenus 方式)通過 popupMenus 擴展點實現(xiàn)上下文菜單,需要設(shè)定 objectContribution 的 objectClass 屬性把上下文菜單添加到相應(yīng)的區(qū)域。例如,如果我們想當(dāng)用戶點擊 Eclipse 中的資源時,彈出的上下文菜單包括某個菜單項,我們可以設(shè)定 objectClass 屬性為:org.eclipse.core.resources.IResource通過 Commands 方式創(chuàng)建菜單項通過 Commands 方式創(chuàng)建菜單項,首先需要創(chuàng)建 Command,通過擴展點 mands,然后我們可以把這個 Command 放到任何區(qū)域,上一小節(jié)已經(jīng)講到,通過 org.eclipse.ui.menus 擴展點確定菜單創(chuàng)建的區(qū)域,最后通過擴展點 org.eclipse.ui.handlers 定義這個 command 的具體行為。在創(chuàng)建 Command 時,我們可以先創(chuàng)建一個 Category,并把相關(guān)的一些命令放到這個 Category 中,這樣有利于管理。代碼清單 2 創(chuàng)建一個 Command(“Show in Glossary Explorer”),并放到一個 Category 中,然后把該 Command 放到 BGSearchResultView 視圖的上下文菜單中,最后通過擴展 org.eclipse.ui.handlers 定義該 Command 的實現(xiàn)類。清單 2. 通過 Commands 方式添加菜單項 通過 Actions 方式創(chuàng)建菜單項正如前面講到,Actions 方式?jīng)]有分離界面的表現(xiàn)和內(nèi)部實現(xiàn),因此,所有這些均通過 action 來完成。如下代碼清單 3 為添加一個 Search 菜單項到 Eclipse 的 Search 主菜單(通過 action 的 menubarPath 指定)中,其中 class 對應(yīng)的值為該 Action 的實現(xiàn)類,該類需要實現(xiàn)接口 IWorkbenchWindowActionDelegate。清單 3. 通過 Actions 方式添加菜單項 通過 popupMenus 方式創(chuàng)建菜單項popupMenus 方式創(chuàng)建上下文菜單項也是通過 action 來實現(xiàn),下面例子為添加一個菜單項到用戶右擊 IGraphicalEditPart 對象時彈出的上下文菜單,通過 menubarPath 指定該 Action 出現(xiàn)的區(qū)域,通過 class 指定該 action 的實現(xiàn)類,該類需要實現(xiàn)接口 IObjectActionDelegate。清單 4. 通過 popupMenus 方式添加菜單項 菜單控制視圖菜單的控制主要包括啟用 / 禁用,顯示 / 隱藏菜單。通過 Command 方式創(chuàng)建的菜單,可以通過 mands 的 visibleWhen 屬性控制菜單的隱藏和顯示,通過 org.eclipse.ui.handlers 的 activewhen 或 enabledWhen 控制菜單的啟用或禁用。通過 Actions 方式創(chuàng)建的菜單,可以通過 action 的 enablement 屬性控制菜單的啟用 / 禁用。通過 popupMenus 方式創(chuàng)建的菜單,可以通過 objectContribution 的 visibility 和 enablement 來設(shè)置該 objectContribution 下的 action 的顯示 / 隱藏和啟用 / 禁用,我們也可以設(shè)置 action 的 enablement 來控制該菜單的啟用 / 禁用。這里不詳細講述 enablement,visibleWhen 和 enabledWhen 的參數(shù)及如何設(shè)置,讀者可以參考第三節(jié)的例子和本文的參考文獻?;仨撌拙幊虒嵺`本文將結(jié)合前兩節(jié)講到的知識,以例子的形式說明如何創(chuàng)建并且控制菜單。首先創(chuàng)建一個視圖(Menu Example),然后分別通過 Commands,Actions 和 popupMenus 方式創(chuàng)建若干個菜單,并添加相應(yīng)的菜單控制點。創(chuàng)建 Menu Example 視圖擴展 org.eclipse.views 創(chuàng)建“Menu Example”視圖,如下代碼清單 5 為創(chuàng)建視圖的 xml 代碼。清單 5. 擴展 org.eclipse.ui.views 創(chuàng)建視圖 創(chuàng)建 Commands采用 Command 方式創(chuàng)建“Menu Example”主菜單(包含 AngryCommand 和 JokeCommand 兩個菜單項),并且基于這兩個菜單項創(chuàng)建了 Menu Example 視圖的下拉菜單和工具欄菜單,及其 TreeViewer 的上下文菜單。如下代碼清單 6 為擴展 mands 創(chuàng)建 Menu Example 命令和類別,并且包含兩個命令:Joke Command 和 Angry Command。清單 6. 擴展 mands 創(chuàng)建命令 關(guān)聯(lián) Commands 到主菜單如下代碼清單 7 為擴展 org.eclipse.ui.menus,并基于前面創(chuàng)建的 Comands,添加一個主菜單 Menu Example,并且包含 Joke Command 和 Angry Command 菜單項。清單 7. 創(chuàng)建 Menu Example 主菜單 關(guān)聯(lián) Commands 到視圖菜單如下代碼清單 8 為擴展 org.eclipse.ui.menus,并基于 Commands 方式創(chuàng)建 Menu Example 視圖的下拉菜單,工具欄菜單和上下文菜單,通過 locationURI 來設(shè)定。Joke Command 即為下拉菜單也是工具欄菜單,只有當(dāng)我們選擇了 TreeViewer 中的節(jié)點時該菜單項才是可見的,參考下面的 visibleWhen-with-iterate-or-instanceof。清單 8. 通過 Commands 方式創(chuàng)建視圖菜單 Commands 的實現(xiàn)類如下代碼清單 9 所示擴展 org.eclipse.ui.handlers 為 Joke Command 和 Angry Command 創(chuàng)建事件處理類,其中 Joke Command 通過 enabledWhen 屬性控制該菜單項是否啟用,當(dāng)我們同時選擇了兩個對象時 Joke Command 處于啟用狀態(tài),否則為禁用。清單 9. 擴展 org.eclipse.ui.handlers 為 Commands 創(chuàng)建實現(xiàn)類 創(chuàng)建 Action 并關(guān)聯(lián)到 Eclipse 的 Search 主菜單采用 Actions 方式在 Eclipse 的主菜單 Search 中添加創(chuàng)建菜單項 SmileAction。擴展 org.eclipse.ui.actionSets 在 Eclipse 的主菜單 Search 中添加一個菜單項 Smile Action。如下代碼清單 10 所示創(chuàng)建該 action 并添加到 search 主菜單,只有當(dāng)我們選擇至少一個對象時(設(shè)置 enablesFor 屬性為“+”),該菜單項才處于啟用狀態(tài)。清單 10. 通過 Actions 方式創(chuàng)建菜單項 pupupMenus 方式創(chuàng)建 Action 并關(guān)聯(lián)到 IResource 資源的上下文菜單擴展 org.eclipse.ui.popupMenus 創(chuàng)建菜單“Menu Example”,該菜單包含一個菜單項 HelloAction。當(dāng)我們在 Eclipse 任何區(qū)域右擊 org.eclipse.core.resources.IResource 資源時彈出的上下文菜單中會出現(xiàn)“Menu Example”菜單。如下代碼清單 11 為創(chuàng)建該上下文菜單的 xml 代碼。清單 11. popupMenus 方式創(chuàng)建上下文菜單 pupupMenus 方式創(chuàng)建 Action 并關(guān)聯(lián)到 IResource 資源的上下文菜單擴展 org.eclipse.ui.popupMenus 創(chuàng)建菜單項 GreetAction 和 CryAction,當(dāng)我們右擊 Menu Example 視圖中的 TreeViewer 節(jié)點時彈出。如下代碼清單 12 所示擴展 org.eclipse.ui.popupMenus 為 Menu Example 視圖創(chuàng)建 GreetAction 和 CryAction 上下文菜單項。使用 visiblity 的 objectState 屬性控制菜單項的可見狀態(tài),使用該屬性要求其選擇的對象實現(xiàn)了 org.eclipse.ui.IActionFilter 接口,具體可參見 Person 類的實現(xiàn)。清單 12. 擴展 org.eclipse.ui.popupMenus 創(chuàng)建菜單 Menu Example 視圖的代碼實現(xiàn)類如下代碼清單 13 所示為 Menu Example 視圖的代碼,該視圖中有一個 TreeViewer,并通過函數(shù) hookContextMenu 把上下文菜單關(guān)聯(lián)到 TreeViewer。其中函數(shù) viewMenuAction 用于更新菜單的狀態(tài),它首先獲取視圖菜單,然后調(diào)用 IMenuManager 的 update 方法更新對應(yīng)菜單項的狀態(tài),從而達到控制菜單的目的。清單 13. Menu Example 視圖代碼 public class MenuExplorer extends ViewPart private TreeViewer treeViewer; private MenuManager fMenuMgr; private Menu fMenu; private static MenuExplorer fInstance = null; public MenuExplorer() fInstance = this; public static MenuExplorer getInstance() return fInstance; public void createPartControl(Composite parent) treeViewer = new TreeViewer (parent, SWT.MULTI); treeViewer.setLabelProvider(new PersonListLabelProvider(); treeViewer.setContentProvider(new PersonTreeContentProvider(); treeViewer.setInput(Person.example(); this.getSite().setSelectionProvider(treeViewer); hookContextMenu(); fInstance = this; public void setVi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效節(jié)能電機項目可行性研究報告(參考范文)
- 文明工地管理制度
- 2025年濕法稀磷酸項目建議書
- 異步電機控制策略
- 2025年智能電網(wǎng)配電設(shè)備項目建議書
- 2025年互聯(lián)網(wǎng)醫(yī)療平臺在線問診平臺與患者健康檔案管理對接報告
- 2025年工業(yè)碳捕獲與封存(CCS)技術(shù)在節(jié)能減排中的應(yīng)用案例研究
- 基于大數(shù)據(jù)的2025年智慧交通流量預(yù)測模型構(gòu)建與分析報告
- 2025年綠色藥品生產(chǎn)技術(shù)現(xiàn)狀與市場推廣路徑研究報告
- 城市污水處理廠智能化升級改造中的能源管理優(yōu)化策略報告
- 小學(xué)道德與法治培訓(xùn)感悟
- 營區(qū)物業(yè)服務(wù)營區(qū)物業(yè)服務(wù)保密措施
- 2023年春季內(nèi)蒙古高一化學(xué)學(xué)業(yè)水平合格性考試卷真題
- 思維導(dǎo)圖在小學(xué)數(shù)學(xué)復(fù)習(xí)課中的應(yīng)用研究 論文
- 導(dǎo)管小組護理管理手冊
- 寶鋼硅鋼廠工藝流程
- 退伙協(xié)議個體工商戶
- 中草藥種植的土壤改良技術(shù)
- 尿膿毒癥護理查房
- 家長會課件:七年級暑假家長會課件
評論
0/150
提交評論