




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、自定義擴展點創(chuàng)建過程這里要介紹的是關于eclipse 中擴展點的問題,我們知道,eclipse本身提供了很多的擴展點,這樣的話,我們可以根據(jù)需要對eclipse的一些功能進行擴展,使得滿足我們的使用,也正是因為這一點,許多的eclipse fans都可以貢獻自己的力量,通過不斷的貢獻eclipse插件,使eclipse的功能越來越強大,現(xiàn)在eclipse已經(jīng)不單單是作為一個開發(fā)工具了,而是發(fā)展成為了一個平臺,我們可以基于這樣的一個平臺進行開發(fā), 為了擴展現(xiàn)有 eclipse 功能或在其上進行構建,插件將具體的 擴展 貢獻給由其他插件暴露的 擴展點 。通常,插件專注于特定區(qū)域的責任,并通過一個或
2、多個擴展點的方式將其他責任指派給其他插件。例如,一個插件允許您可視地并行比較兩個文件的內容,但它不會關心如何讀取這些文件甚至如何解釋這些文件的結構;這是其他插件的工作。比較兩個文件時,該插件首先檢查是否有另一個插件可以解釋這些文件的結構。如果找到一個,它就會向找到的插件詢問有關文件結構的信息,并在比較過程中使用該信息。 那現(xiàn)在我們就通過一個簡單的例子來示范一下怎么個擴展法 : 首先我們先新建一個 插件工程,注意這個工程作為 rcp 項目存在的,比如工程名稱就叫做 themainmenuproject, 接下來選擇一個插件模板,這里我們選擇第二個 rcp application with a v
3、iew : 點完成,這樣的話我們就將這個項目建好了,看下項目的結構: 接下來,我們打開 plugin.xml或 manifest.mf文件,切換到 extension points 標簽頁,然后我們就可以新增擴展點了,點 新增 點完成后,系統(tǒng)會自動切換到 org.vwpolo.rcp.extender.exsd 文件的編輯頁面,這時我們切換到 definition 標簽頁,開始擴展擴展點了: 我們先新建一個 元素(new element)名稱為 extender,這時有兩個元素了,在第一個元素上點右鍵,在彈出的對話框中選擇序列, 再在這個新增的對象上右鍵新增一個 extender 對象。 在
4、extender 的明細頁中將 最大邊界選擇為 無邊界就行了。 接下來我們給 extender 元素增加屬性,過程就省略了 上面是添加好的屬性,注意其中的classname屬性 好了,擴展點就這樣建好了,下面我將這個擴展點文件貼出來: enter description of this extension point. enter the first release in which this extension point appears. enter extension point usage example here. enter api information here. enter
5、information about supplied implementation of this extension point. 接下來,我們開始實現(xiàn) 擴展點的一些 功能吧,新增選中的包和類: 為了方便起見,我將這些類的源代碼貼出來 thefirstaction .java: packageorg.vwpolo.rcp.extension.client.actions;importorg.eclipse.jface.action.action;publicclassthefirstactionextendsactionpublicstaticfinalstringid=thefirstac
6、tion.class.getname();/*構造函數(shù)*/publicthefirstaction()setid(id);settext(第一個action);publicvoidrun()shellshell=display.getcurrent().getactiveshell();messagedialog.openinformation(shell,信息,第一個項目中的action);extensioncontances .java package org.vwpolo.rcp.extension.client.extender;/* * 擴展點常量。 */public class e
7、xtensioncontances public static final string extension_id = org.vwpolo.rcp.extender; public static final string attr_id = id; public static final string attr_name = name; public static final string attr_type = type; public static final string attr_clientid = clientid; public static final string attr
8、_index = index; public static final string attr_desc = desc; public static final string attr_class = classname; public static final string type_perspective = perspective; public static final string type_view = view; public static final string type_action = action;extensionhelper .java package org.vw
9、polo.rcp.extension.client.extender;import java.util.arraylist;import java.util.hashmap;import java.util.iterator;import java.util.list;import java.util.map;import org.eclipse.core.runtime.iconfigurationelement;import org.eclipse.core.runtime.platform;import org.eclipse.jface.action.iaction;import or
10、g.eclipse.jface.action.imenumanager;import org.eclipse.jface.action.menumanager;import org.vwpolo.rcp.extension.client.activator;import org.vwpolo.rcp.extension.client.actions.thefirstaction;/* * 。 */public class extensionhelper /* */ private string id = extensioncontances.extension_id; /* */ public
11、 static extensionhelper instance; /* action map */ private mapstring, list actionmap = new hashmapstring, list(); /* 視圖 map */ private mapstring, list viewmap = new hashmapstring, list(); /* 透視圖 map */ private mapstring, list perspectivemap = new hashmapstring, list(); /* */ private menumanager exte
12、ndmenu; /* * 構造函數(shù)。 */ private extensionhelper() loadextensions(); /* * 。 * return extensionhelper */ public static extensionhelper getinstance() if (instance = null) instance = new extensionhelper(); return instance; /* * 讀取擴展點的屬性,然后生成extensioninfobean 對象。 */ private void loadextensions() iconfigura
13、tionelement elements = platform.getextensionregistry().getconfigurationelementsfor(activator.extension_id);/ iconfigurationelement elements = platform.getextensionregistry().getconfigurationelementsfor(activator.extension_id); 此句在運行時報錯 將activator.extension_id修改為org.vwpolo.rcp.extender即可 if (elements
14、 = null | elements.length = 0) return; for (int i = 0; i elements.length; i+) iconfigurationelement element = elementsi; extensioninfobean bean = new extensioninfobean(); bean.setid(element.getattribute(extensioncontances.attr_id); bean.setname(element.getattribute(extensioncontances.attr_name); bea
15、n.settype(element.getattribute(extensioncontances.attr_type); bean.setclientid(element.getattribute(extensioncontances.attr_clientid); string index = element.getattribute(extensioncontances.attr_index); if (index = null | index.trim().isempty() bean.setindex(100); else bean.setindex(integer.parseint
16、(index); bean.setdesc(element.getattribute(extensioncontances.attr_desc); if (extensioncontances.type_action.equalsignorecase(bean.gettype() try string classpath = element.getattribute(extensioncontances.attr_class); object object = null; if (!classpath.isempty() object = element.createexecutableext
17、ension(extensioncontances.attr_class); else object = element.createexecutableextension(extensioncontances.attr_clientid); if (object instanceof iaction) bean.setaction(iaction) object); catch (exception e) e.printstacktrace(); appendgroup(bean); private void appendgroup(extensioninfobean bean) if (e
18、xtensioncontances.type_perspective.equalsignorecase(bean.gettype() addtomap(perspectivemap, bean); else if (extensioncontances.type_view.equalsignorecase(bean.gettype() addtomap(viewmap, bean); else if (extensioncontances.type_action.equalsignorecase(bean.gettype() addtomap(actionmap, bean); private
19、 void addtomap(mapstring, list map, extensioninfobean bean) list list; if (map.containskey(id) list = (list) map.get(id); else list = new arraylist(); map.put(id, list); list.add(bean); public void fillmenubar(imenumanager menumanager) extendmenu = new menumanager(擴展菜單); menumanager.add(extendmenu);
20、 fillmenubar(perspectivemap); fillmenubar(viewmap); fillmenubar(actionmap); private void fillmenubar(mapstring, list map) list list = map.get(id); if (list = null | list.size() = 0) return; iterator iter = list.iterator(); while (iter.hasnext() extensioninfobean bean = iter.next(); iaction action =
21、bean.getaction(); if (action = null) action = new thefirstaction(); extendmenu.add(action); extensioninfobean .java package org.vwpolo.rcp.extension.client.extender;import org.eclipse.jface.action.iaction;/* * 擴展點實體 。 */public class extensioninfobean /* */ private string id; /* */ private string nam
22、e; /* */ private string type; /* */ private string clientid; /* */ private int index; /* */ private string desc; /* */ private iaction action; /* * return id */ public string getid() return id; /* * 設置id 。 */ public void setid(string id) this.id = id; /* * return name */ public string getname() retu
23、rn name; /* * 設置name 。 * param name */ public void setname(string name) = name; /* * return type */ public string gettype() return type; /* * 設置type 。 * param type */ public void settype(string type) this.type = type; /* * return clientid */ public string getclientid() return clientid; /*
24、* 設置clientid 。 * param clientid */ public void setclientid(string clientid) this.clientid = clientid; /* * return index */ public int getindex() return index; /* * 設置index 。 * param index */ public void setindex(int index) this.index = index; /* * return desc */ public string getdesc() return desc;
25、/* * 設置desc 。 * param desc */ public void setdesc(string desc) this.desc = desc; /* * return action */ public iaction getaction() return action; /* * 設置action 。 * param action */ public void setaction(iaction action) this.action = action; 現(xiàn)在差不多了,我們在 applicationactionbaradvisor .java 文件的 fillmenubar 方法調用 extensionhelper 的方法就行了 protected void fillmenubar(imenum
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度專業(yè)車庫租賃與物業(yè)管理合同
- 服裝批發(fā)市場垃圾清運合同
- 2025年度多人共同經(jīng)營網(wǎng)店借款及利潤分配合同
- 二零二五年度玉器珠寶市場拓展與區(qū)域代理合同
- 2025年度安全無憂型個人租房合同
- 2025年度企業(yè)節(jié)能減排改造補貼協(xié)議書
- 2025年度員工心理健康關懷上班協(xié)議合同全新版
- 2025年度文化場館設施維護勞務協(xié)議書
- 2025年度影視演員場記助理職業(yè)素養(yǎng)培訓聘用合同
- 2025年佳木斯職業(yè)學院單招職業(yè)技能測試題庫新版
- 中國春節(jié)ppt英文版 Chinese New Year
- 高中數(shù)學《6.2 排列與組合》課件與導學案
- 腸道健康講座活動策劃
- 小學三年級下冊數(shù)學教案3篇
- 《云南紅色旅游》課件
- 孤殘兒童試題庫(含答案)
- 新人美版高中美術選擇性必修“繪畫”《認識多面繪畫-繪畫的工具與材料》教學設計
- premiere設計畢業(yè)論文
- 三年級體育教學進度表
- 醫(yī)務人員法律法規(guī)專題培訓
- 《紅樓夢第四回》課件
評論
0/150
提交評論