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