天天看點

給視圖加下拉菜單和按鈕和加入編輯器.

本例将給視圖加入下拉菜單和按鈕,同時再為清單添加一個右鍵菜單.

建立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,如需轉載請自行聯系原作者

繼續閱讀