GEF的英文全稱是Graphical Editor Framework。GEF的中文書籍在市面上面基本沒有的。但是很多的Eclipse的二次開發項目可能卻需要用到Eclipse的GEF的相關技術。GEF是一個Eclipse的項目之一,著名的XMind軟體(http://www.xmind.net/)就是基於GEF開發的,如下圖所示意,做出來的介面非常的漂亮和靈活,另外,WindowBuilder工具(http://www.eclipse.org/wb)也是基GEF開發的,此外Apache的一個BPEL的一個項目也是基於GEF開發的。上面只是其中三個例子,類似的其他的例子非常的多,筆者就不在一一列舉。
基於GEF的 XMind的工作空間的效果展示
既然現在我們已經知道了GEF能做什麼了,那麼GEF的架構是如何組成的呢。換句話說,學習GEF需要學習和瞭解哪些技術呢。各位看官,且聽筆者慢慢給你娓娓道來。
GEF Eclipse項目主要由三大部門組成:Draw2D, Zest 和 GEF。 讀者看到這可能就會感到奇怪了,為什麼GEF Eclipse項目還包括GEF自身呢。其實很好理解,就是用GEF這一部分代替整個的GEF Eclipse項目,就好比,我們有的時候,用北京來代替中國一樣,只是一個名稱罷了。下面分別介紹下面這個三個組成部分:
(1) Draw2D
Draw2D是一個輕量級的畫圖架構。所謂的輕量級是相對於重量級而言的,輕量級是指這些被Draw2D繪製的圖形(figure)是有純Java對象繪製出來的,和具體的作業系統資源沒有直接的聯絡。而重量級意思就是每一個SWT的widgets(組件)都是和具體作業系統資源相關的API。廢話少說,那麼Draw2D主要的功能是什麼呢。說白了,Draw2D主要用來顯示圖形資訊,所以的Draw2D圖形都是在SWT的畫布(canvas)裡面顯示的,需要注意的是,其沒有提供互動的行為。
(2) Zest
Zest 是建立在Draw2D架構之上的一個架構。其提供了類似於Jface的功能(Jface相對於SWT來說)。使用Zest 能非常容易的把一個Java的模型和Draw2D的圖形綁定在一起。
(3)GEF
GEF 也是建立在Draw2D架構之上的一個架構。提供了非常非常豐富的API,能夠讓使用者和圖形介面進行互動,比如拖拽畫板(palette),列印,對圖形介面的實物操作(比如,圖形畫錯了,取消或者復原)等。
總之,下面一幅圖,代表了作者的千言萬語。
下面是一些其他參考文章:
http://www.cnblogs.com/bjzhanghao/archive/2005/02/09/103595.html
http://www.eclipse.org/articles/Article-GEF-Draw2d/GEF-Draw2d.html
http://wiki.eclipse.org/GEF_Description
http://wiki.eclipse.org/GEF_Description2
筆者的後續文章,將分別一一介紹Draw2D,Zest和GEF的相關技術,並結合一些實際的例子,敬請期待。。。。。。。