Eclipse華麗轉身之控件表格工廠
則圖片上表格中的值與模型對象之間的關系,這樣就不難理解Translator數據轉換器需要做的事情了,接下來看下它的類圖;

其中AbstractKTableFactory# doCreateControl方法,在創建UI控件的時候調用了getTranslator方法返回的就是實現IObjectTranslator接口的子類;protected Control doCreateControl(Composite r_Parent, UIDefinition r_UIDefinition) {……………………………………………………………………… IObjectTranslator t_Translator = this.getTranslator(); IKTableColumn[] t_Columns = this.getColumns(); for (int i = 0; i < t_Columns.length; i++) { if (t_Columns[i] instanceof AbstractTableColumn) { AbstractTableColumn t_Column = (AbstractTableColumn) t_Columns[i]; t_Column.setIntrospector(t_Translator.getIntrospector());//這里會為每一個column設置一個數據訪問器 } }……………………………………………………………………… return createActionComposite(r_Parent, r_UIDefinition.isView()); }看下IObjectTranslator接口中定義的方法;

同樣formeTree和toTree方法,適用于KTreeBuilder創建出來的UI控件上表格數據的保存和回顯;

fromTable方法在AbstractKTableFactory中的save方法中被調用,一般用于UI界面上編寫好數據,類似按保存按鈕,或者向導中“確定”或者“完成”按鈕時候調用,用于把表格中填寫的數據存在一個數據備忘錄IMemento中。
toTable方法在這個UI界面被構造的時候方法中,new一個數據備忘錄IMemento(后面的章節會講到)的時候被調用,用于回顯上一次填寫的數據。備忘錄IMemento提供一個數據備份和恢復的接口,可以用來備份數據和恢復數據.它與IStore非常相似,但是為了便于理解,使用Memento名字。可以參考Memento模式,下圖為實現IMemento接口的子類,都可以根據自己控件的特性來備份恢復數據;

接口中就定義了2個方法,分別為backup備份數據,restore恢復數據,我們先可以來看一下TableMemento中的方法;protected List doBackup(String r_Type, Object r_Model) { if (null==this.objectTranslator) { return new ArrayList(); } else{ return this.objectTranslator.toTable(r_Type, r_Model); } }
在Translator章節中我們講述了toTable方法,它是翻譯成一個可以用于表格數據的列表,在AbstractKtableFactory中構造UI的方法中(doCreateControl)方法中我們會新建一個TableMemento的實例對象。在構造TableMemento實例的時候就會調用構造函數中的backup方法來保存UI界面中控件的值。
那接口中restore恢復數據何時被調用呢?可以看下圖,例如我們在數據集編輯器中空白處點擊右鍵出現的菜單如下圖;

ICommand是用來提供Redo和Undo的接口,SimpleCommand則是ICommand的實現類,實現類中的redo和undo方法都會調用IMemento實現類的restore方法調用后來恢復數據。
基本概念說完了,我們看下具體的表格工廠:KTable、KTree、Table。
KTable表格工廠

AbstractKtableFactory用來支持表格控件的創建。

getCloumns方法:返回一個IKTableColumn []的數組,必須由子類來實現,IKTableColumn是用來支持Ktable的表格列,一般只需要構造一個KPropertyTableColumn(該數據列用來通過property來訪問對象)就可以了。getActionProvider方法:返回的IKTableActionProvider是控件上的一些Action操作,通常可以通過創建DefaultKTableActionProvider對象來實現。子類可以重寫這個方法來構造自己的Action來進行對表中的數據進行操作。getTranslator方法:返回數據數據轉換器,通常為自己自定義的數據轉換類
請輸入評論內容...
請輸入評論/評論長度6~500個字
最新活動更多
- 1 特斯拉Optimus Gen3量產在即,哪些環節最具確定性?
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實測:中文穩、細節炸,設計師慌了
- 3 AI狂歡遇上油價破百,全球股市還能漲多久? | 產聯看全球
- 4 6000億美元估值錨定:字節跳動的“去單一化”突圍與估值重構
- 5 Tesla AI5芯片最新進展總結
- 6 連夜測了一波DeepSeek-V4,我發現它可能只剩“審美”這個短板了
- 7 熱點丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 8 2026,人形機器人只贏了面子
- 9 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續扣錢!
- 10 AI Infra產業鏈卡在哪里了?


分享













