這是一個計劃中的項目。用于方便編寫自定義控件。分為兩個項目
silver:抽象控件以及框架
iron:使用Silver的具體控件Example
下分3個子項目
silver.control:自定義控件框架
silver.tree:抽象的樹型控件
iron.tree:具體的樹型控件(將contribute給lumaQQ,界面風格完全模仿QQ和TencentMessenger)
————
自定義控件框架的原理就是MVC。silver.control包含以下的類
SilverModel 通用的模型類
SilverModelListener 通用的模型Listener
SilverView 通用的視圖類
SilverViewFactory 視圖工廠,用于關聯Model與View
SilverControl 中心的控件,用于維護Model與View的關聯,以及View的創建
————
由于SWT對于控件parent的可變性的一些限制,我沒有把SilverView做成Composite之類的Widget,而是把SilverView作為一個抽象的視圖單元,它一方便起到Layout的作用,一方面又維護一個與View相關的控件列表。控件中的所有子控件實際上都是添加到一個最外層的控件上的。而每個SilverView的職責就是擺放好這些小的控件。
————
SilverModel通過SilverModelListener與SilverView相互。SilverView實現了SilverModelListener接口。SilverView在創建時就知道它所對應的SilverModel,但是它需要通過SilverControl才能知道其他SilverModel所對應的SilverView。
————
silver.tree 的目標是創建一個抽象的樹型控件。它不包含任何具體的field。只是有一個樹型的數據結構,以及一個通用的基礎View用來排列將來用戶自己寫的View。另外它會使用動態代理來動態生成Model的Wrapper,以接觸Model與View的強制一一對應。否則一個Model在一棵樹中只能被添加一次。
————
iron.tree 在silver.tree的基礎上添加自己所需要的Model字段,以及編寫幾個具體的View,在其中擺放好所需要的表現用控件。最終的效果應該與TencentMessenger或者QQ的聯系人列表盡可能的像,并且有完整的動態功能特性。
整體結構上來看非常像Swing。SWT與Swing最大的不同是Swing完全自己畫,而SWT只有系統沒有才自己畫。我覺得這樣做出來的控件雖然會比原生控件慢許多,不過靈活性是極其強大的,這種靈活性在某些表現豐富的娛樂類應用是必要的。對于整體的結構把握已經比較清楚了。今天已經實現了iron.tree的abstract.tree,現在不過是把abstract.tree再抽象一次變成一個單獨的silver項目。下一步的框架目標應該是支持換膚之類的東西。
浙公網安備 33010602011771號