上面有講ChinaEditor類繼承EditorPart抽象類時,隻實作了init,createPartControl兩個方法,本節将逐漸講解其他的5個方法的用法.
EditorPart方法的執行情況.
要使用好EditorPart,首先得了解其方法在各種情況下的執行流程,在類的每一個方法中加上一個列印語句.運作後看列印輸出,就可以得到如下方法執行流程.
(1)輕按兩下清單項打開編輯器時
init--->isDirty--->createPartContorl--->isDirty--->isDirty--->isDirty--->isDirty--->isDirty--->setFocus--->isDirty--->isSaveAsAllowed.
(2)關閉編輯器時,setFocus--->isDirty--->isSaveAsAllowed--->isDirty--->isSaveAsAllowed--->setFocus--->isDirty如果儲存儲存編輯器,則最後還會執行doSave()方法.
(3)單擊編輯器标題時:setFocus
(4)編輯器失去焦點時:isDirty--->isSavedAsAllowed--->isDirty----->isSaveASAllowed.
(5)編輯器得到焦點時:setFocus---->isDirty---->isSaveAsAllowed---->isDirty----->isSaveAsAllowed.
(6)當編輯器可以儲存,選擇主菜單"檔案--->儲存"或按Ctrl+S快捷鍵時:isDirty--->doSave.
各個方法的作用以及含義:
1.boolean isDirty()
由此方法獲知編輯器是否髒了(所謂"髒"是指編輯器中的值已經發生了改變),true表示髒了,當其傳回true時,會出現兩個效果:編輯器的标題出現一個"*"号,主菜單"檔案"下的"儲存"項可用.
特别要注意的是:編輯器不會自己判斷自己是否髒了,這需要在程式中用語句手動設定,例如:在編輯器的文本框加入一個鍵盤監聽事件,當在文本框中輸入字元時,則将isDirty方法傳回值設定為true(髒).
在方法執行的過程中,可以看到此方法的執行是最頻繁的,是以不要在此方法中加入太耗時的執行語句.否則會影響程式執行速度.
2.void doSave()
在這個方法中編寫儲存編輯器的代碼,當選擇主菜單"檔案---->儲存"時也會執行此方法.但因在isDirty傳回true時,"儲存"菜單和Ctrl+S快捷鍵才能用,也即isDirty方法控制着doSave方法的執行.
當儲存成功時,要注意将髒的狀态設定回false,并調用firePropertyChange方法将編輯器的界面狀态更新(編輯器标題前的"*"号以及"儲存"菜單).
3.boolean isSaveAsAllowed()
是否允許編輯器使用"另存為"功能,如果此傳回false,則不能使用"另存為"功能,而且主菜單"檔案"下的"另存為"項被置灰.
4.void doSaveAs()
和doSave的作用相似,在這裡書寫"另存為"功能的處理代碼.
5.void setFocus()
當編輯器獲得焦點時執行該方法.
一個編輯器執行個體
在本例子中,當修改ChinaEditor編輯器中文本框的文字時候,編輯器标題前出現"*"而且主菜單"檔案---->儲存"可用,當編輯器儲存後,"*"消失并且"儲存"菜單不可用,當編輯器為髒時,關閉編輯器會彈出一個提示儲存的對話框.
ChinaEditor.java(前面的我貼的代碼就是全部的,這裡再貼 一遍)
程式說明:firePropertyChange(IEditorPart.PROP_DIRTY)這一句除了能将界面狀态重新整理之外,如果IEditorPart對象添加了如下監聽器,則還可以觸發其中的propertyChange事件.
chinaEditor.addPropertyListener(new IPropertyListener(){
//此時source為ChinaEditor對象,propId為IEditorPart.PROP_DIRTY這個常量值
public void propertyChanged(Object source,int propId){
//......事件處理代碼,這裡省略
}
})
本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/4175754.html,如需轉載請自行聯系原作者