本例将給視圖加入下拉菜單和按鈕,同時再為清單添加一個右鍵菜單.
建立ActionGroup類
加入菜單和按鈕的方法與SWT和JFace元件的一樣,先建立一個ActionGroup代碼如下:
MyActionGroup.java
程式說明:
1.本程式中含有兩個Action類:Action1,Action2,和以往的Action不同之處在于它的圖像描述符是直接從Eclipse環境中取得.既然插件在Eclipse環境内運作,那麼Eclipse本身的圖示就可以直接拿來使用,不過Eclipse會給出 一個警告:"建議不要通路:由于對必須的庫...jar 具有一定的限制,一次不能通路類型WorkbenchImages",這是因為該類internal包中,也就是說它僅局限于内部使用.
2.fillContextMenu方法比起以前單純的SWT程式設計少了幾句.在後邊的總結在紅中可以看到它移動到View1類中去了,主要原因是為了此方法兼顧添加視圖的下拉菜單.
修改View1類
在Viwe1中增加了3中方法,分别用來加入視圖的導航欄按鈕,下拉菜單,以及加入表List的右鍵菜單.代碼如下:
(下面的這個View1.java中也加入了編輯器對應的事件.輕按兩下視圖1的清單項,則打開對應的編輯器,是以在View1類的List對象添加一個滑鼠輕按兩下視圖1的清單項,則打開對應的編輯器,一次在View1類的List對象添加一個滑鼠輕按兩下事件監聽器.另外還要考慮到,如果已經打開了清單項對應的編輯器,則下次再輕按兩下時就不應再打開該項的編輯器,而是将其設成目前編輯器.)
得到編輯器對象:IEditorPart editor = IWorkbenchPage.findEditor(IEditorInput);
打開編輯器對象:IWorkbenchpage.openEditor(IEditorInput.editorID);
View1.java
程式說明:視圖加按鈕,菜單的方式和以前SWT的方式是一樣的,隻不過以前自己生成MenuManager等對象,而現在隻需要使用插件平台提供的MenuManager對象.
在事件處理方法:本程式中為了便于了解,使用了if...else這種簡單的方式來判斷被輕按兩下的類表項,這适合清單項較少的情況,如果清單項太多,則代碼會相當長.解決這個問題,可将IEditorInput中沒有用到的getName方法借用一下,把editorID放到此方法裡面,這樣就可以用下面的方式來得到IEditorInput和editorID了.
String key = ""+list.getSelectionIndex();
IEditorInput editorInput = (IEditorInput)list.getData(key);
String editorID = editorInput.getnName();
在實際開發綜合很多界面都是建立在編輯器上,雖然在這裡是隻講了最常用的編輯器使用方法,但已經足夠應付大部分開發的需要,如果你想了解更多關于編輯器的資訊,可以查閱編輯器的幫助文檔,它在幫助中的位置是"平台插件開發者指南--->程式員指南----->編輯器".
将在透視圖中添加上對應的編輯器類:(這種效果就像在Eclipse張輕按兩下Java源檔案,打開檔案的編輯器一樣)
和以前一樣,先來修改plugin.xml檔案将編輯器的擴充點加入,然後再建立相應的編輯器類.最後編寫清單的事件代碼.
plugin.xml
上述代碼說明:編輯器的擴充點是org.eclipse.ui.editors,它各項的含義和視圖擴充點基本一樣,可參照視圖擴充點的說明,這裡強調一點:icon是必填項.
編輯器必須實作IEditorPart接口,但通常是繼承抽象類EditorPart類(EditorPart是IEditorPart的子類).繼承EditorPart的子類必須實作父類的7個方法,在此先實作方法init,createPartControl,其他方法空實作.
代碼說明:編輯器的擴充點是org.eclispse.ui.editor
ChinaEditor.java
擷取視圖對象是用IWorkbenchPage的findView方法,方法參數是視圖在plugin.xml中的id辨別,擷取編輯器對象是用findEditor方法,但該方法的參數卻不是id辨別,而是一個IEditorInput對象.另外,加載一個編輯器是用IWorkbenchPage的openEditor(editorInput,editorID)方法.
由上可知,一個編輯器要對應一個IEditorInput和EditorPart,而且在IWorkbenchPage中是根據IEditorInput來取得EditorPart.
附上關系圖:
ChinaEditorInput.java
FranceEditor.java
FranceEditorInput.java
UsaEditor.java
UsaEditorInput.java
本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/4174566.html,如需轉載請自行聯系原作者