Hello,大家好~不知道還有沒有老朋友記得我。N年前那個寫流程自動化測試的程序媛就是我,可能看完那篇文章很多人認為我是自動化測試方向。No,No,No~今天破案了,我真正的主要技術方向——Eclipse插件開發(fā)。是的,如此小眾的技術,有點疑惑都滿網(wǎng)找不到答案的技術。思考了很久這塊可以寫點啥,基礎開發(fā)我也不多說了,愿意看這篇文章的我也就默認已經(jīng)是Eclipse插件開發(fā)入門了。
Eclipse插件開發(fā),接觸過這塊的同學們都知道,無論是控件也好,向?qū)б晥D也罷。但凡每次開發(fā)個不起眼的小功能,從零開始堆代碼,都很煩躁,各種composite開始套,各種GridLayout布局開始調(diào)。當你的公司要求你開發(fā)大量的插件功能時,可能多數(shù)的時間你都在堆砌這種煩躁的代碼。
在我司的EOS Platform里封裝了進行了大量的swt封裝,今天我們就來說說其中最基礎的控件類封裝,即屬性編輯器。我們先來看下我們的UI框架。
每個Tab頁中我們進行了完整的對象編輯器的封裝,每個對象編輯器上,放置了多個屬性編輯器。
StringPropertyEditor就是一個屬性編輯器,ObjectEditor為一個對象編輯器,我們可以在一個ObjectEditor上添加多個StringPropertyEditor。StringPropertyEditor基礎方法(不僅限于所展示的方法):setLabel(String label):標簽名稱。setPropertyName(String name):Text中value的數(shù)據(jù)映射key。doAddValidator(IValidator validator):添加校驗器。這個時候我們是不是可以看出SWT控件開發(fā)和屬性編輯器開發(fā)的差異了?總結(jié)一下:
可以看下我們可以進行多少種不同的控件封裝。
看到類名大家應該差不多都清楚每個屬性編輯器的大體功能。我們就拿一個StringPropertyEditor看看它是如何封裝的吧。
StringPropertyEditor
StringPropertyEditor就是Label+Text,例如:
1.首先它一定是先有一個對象屬性的基類AbstractPropertyAccessor,基類中的方法:
這個基類涉及到三個屬性:propertyName:value的數(shù)據(jù)映射key。element:默認為當前對象編輯器中的value對象,可給單個屬性編輯器設置單獨的value對象。But!該value對象中必須包含propertyName設置的key值。introspector:這是個什么?這是個數(shù)據(jù)訪問接口對象Introspector。該接口定義了如何根據(jù)一個名稱(propertyName)來訪問一個對象(element)中的值。這樣設計為了提供靈活性,因為通常訪問數(shù)據(jù)有兩種方式。一種是根據(jù)Bean的屬性進行訪問,還有一種是使用Map中的Key進行訪問,所以設計這個接口來訪問對象中的數(shù)據(jù),用戶如果需要的話,也可以提供新的實現(xiàn),如直接訪問對象的Field或者其它。簡單看下該接口的一個實現(xiàn)類所提供的方法。
通過Property的方式來訪問一個Bean對象,在Property 不存在的情況會拋出異常。對于對象的存儲用ognl.Ognl來實現(xiàn)。2.AbstractPropertyAccessor基類只是提供了數(shù)據(jù)層的封裝,我們還需要一層封裝來提供屬性編輯器的基本實現(xiàn)AbstractPropertyEditor,這個類封裝了所有控件的布局以及可能的操作。
其實這是相當長的一個封裝,抽取出核心事務,我們來說一說。添加控件
這是一個核心的方法,你不需要去調(diào)用這個方法,在對象編輯器中的基類里會自動調(diào)用來這個方法來繪制所有添加的屬性編輯器。buildEditorControl創(chuàng)建用來編輯的SWT控件,即控件,控件的基本提示信息,控件的GridData,控件的錯誤信息的圖片等等。該方法中通過調(diào)用保護方法protected abstract IControlCreator createControlCreator()來獲取真實的子類控件。getLayoutDataBuilder用來封裝控件的布局,同樣,子類可以通過重構(gòu)來改變自己的布局。
這個方法同樣是對控件的處理,之所以同控件的添加分開,是因為這個方法中的操作并不是每個控件必須的,根據(jù)需要繼承開發(fā)。這個封裝方法中做了兩件事,一個是binding,也就是處理控件的聯(lián)動,這里封裝了控件的屬性值綁定聯(lián)動,以及反向綁定的聯(lián)動處理。另一個就是為當前的編輯控件增加焦點監(jiān)聽器。動態(tài)更改控制值
這個方法除了在load的時候會調(diào)用,在對象編輯器使用的過程中,控件的聯(lián)動也會使用到,比如最常見到的,瀏覽資源,點擊瀏覽的button彈出資源選擇框,根據(jù)選中的對象回填對象編輯器中的值,就會用到該方法。在這個setValue方法中,是通過數(shù)據(jù)改變的封裝接口去實現(xiàn)的。我們可以看下這個數(shù)據(jù)改變的容器接口。
-
封裝
+關注
關注
126文章
7728瀏覽量
142598 -
Eclipse
+關注
關注
1文章
114瀏覽量
21398
發(fā)布評論請先 登錄
相關推薦
評論