eclipshine

          Eclipse主題站

          GEF框架分析之一

          首先我們來(lái)創(chuàng)建一個(gè)基于GEF的瀏覽器(而不是編輯器),也就是說(shuō),它只能瀏覽一個(gè)模型,而不能夠進(jìn)行編輯。先關(guān)注于瀏覽而不是編輯,有助于理解GEF的一些核心的概念。

           

          GraphicalViewercreateControl()方法

          在開始之前,最先要弄明白的是,一個(gè)GEF圖如何能夠顯示在由ViewPartcreatePartControl(Component parent)中提供的這個(gè)parent控件上。這是通過(guò)GEFGraphicalViewer(準(zhǔn)確的說(shuō)應(yīng)該是EditPartViewer,GraphicalViewerEditPartViewer的子接口,EditPartViewer的名字可能更容易理解一些:是為EditPart創(chuàng)建一個(gè)Viewer進(jìn)行顯示)來(lái)進(jìn)行的。GraphicalViewer可以將其自身適配到任何一個(gè)SWT Control上。它的createControl()方法接受一個(gè)SWT Control來(lái)作為適配的對(duì)象,將GEF所生成的Figure顯示在這個(gè)SWT Control之上。(在內(nèi)部實(shí)現(xiàn)上,GraphicalViewer使用Draw2DLightweightSystem來(lái)做這個(gè)事情,將Draw2dFigure對(duì)象繪制在SWTControl上)

           

          在弄明白了這一點(diǎn)之后,我們就會(huì)知道,實(shí)際上是將GEF放在ViewPart中還是放在EditorPart對(duì)于GEF而言是沒(méi)有本質(zhì)的區(qū)別的,甚至將GEF放在任何的SWT Composite上都是可以的。不過(guò)GEF框架中提供了對(duì)創(chuàng)建EditorPart的缺省實(shí)現(xiàn)。而如果要在Editor之外使用GEF的話,需要額外的對(duì)GraphicalViewer做一些設(shè)置。

           

          下面的這個(gè)圖,給出了GEF中的幾個(gè)主要關(guān)系,下面會(huì)有對(duì)這個(gè)圖的解釋。

           image001.png


          setContent
          ()

          GraphicalViewer的思想,類似于JFace中所實(shí)現(xiàn)的Viewer思想:要顯示一個(gè)控件,需要輸入的是一個(gè)模型對(duì)象,要顯示的內(nèi)容根據(jù)輸入的模型對(duì)象來(lái)進(jìn)行的。因此,GraphicalViewer同所有JFace Viewer一樣有一個(gè)方法,叫做setContent(Object o)來(lái)接受一個(gè)模型對(duì)象,而對(duì)這個(gè)模型對(duì)象如何進(jìn)行處理并顯示,就是GEF的工作了。

           

          在創(chuàng)建一個(gè)GraphicalViewer之后,要使GEF能夠運(yùn)轉(zhuǎn)起來(lái),還需要做如下幾件事情:

          1.       設(shè)置一個(gè)RootEditPartRootEditPart的是使整個(gè)GEF框架運(yùn)行起來(lái)的關(guān)鍵之一。RootEditPart并不對(duì)應(yīng)于任何的模型對(duì)象,它將從setContents()方法中接收到的模型對(duì)象進(jìn)行轉(zhuǎn)換,并添加到整個(gè)的EditPart體系中去,具體的添加過(guò)程后面會(huì)有詳細(xì)討論。

          2.       設(shè)置其EditPartFactory:負(fù)責(zé)從模型到EditPart的轉(zhuǎn)換。一般來(lái)說(shuō)一個(gè)模型對(duì)象對(duì)應(yīng)于一個(gè)EditPart。這個(gè)類的

          3.       設(shè)置EditDomain:用來(lái)接收事件并選擇恰當(dāng)?shù)氖录幚砗瘮?shù)進(jìn)行處理,因?yàn)槲覀兩胁恍枰M(jìn)行編輯,因此這一個(gè)可以暫時(shí)略過(guò)。

          4.       調(diào)用setContents()方法:為其設(shè)置要顯示的內(nèi)容。

           

          GraphicalViewer所顯示的內(nèi)容,肯定是一個(gè)Draw2d中的IFigure對(duì)象。而如何從一個(gè)模型對(duì)象到一個(gè)Figure對(duì)象呢?這中間的聯(lián)系就是通過(guò)EditPart來(lái)完成的。GEF使用的是MVC模式,Model部分可以使任意的模型對(duì)象;View部分就是Draw2dIFigure對(duì)象,聯(lián)系ModelViewController,在GEF中稱為EditPart。簡(jiǎn)單的說(shuō),GEF中的EditPart,負(fù)責(zé)將模型轉(zhuǎn)換為IFigure的顯示,它從模型中讀取信息,生成Figure;另一方面,EditPart負(fù)責(zé)從View接收事件,并將這些事件轉(zhuǎn)化為對(duì)模型的修改。在這一部分中,我們暫時(shí)只關(guān)注于第一個(gè)方面:EditPart是如何將一個(gè)模型轉(zhuǎn)換為Figure以進(jìn)行顯示的。

           

          posted on 2005-07-23 17:17 Living Not Striving 閱讀(2932) 評(píng)論(4)  編輯  收藏 所屬分類: GEF

          評(píng)論

          # re: GEF框架分析之一 2005-10-22 23:31 yizhe

          很不出,這樣一所,我又有點(diǎn)理解了
          謝謝  回復(fù)  更多評(píng)論   

          # re: GEF框架分析之一 2007-06-21 08:49 lonelystarchen

          能把畫板放到composite么?  回復(fù)  更多評(píng)論   

          # re: GEF框架分析之一[未登錄](méi) 2008-03-22 19:25 新手

          很好很好很好很好,期待出下篇文章  回復(fù)  更多評(píng)論   

          # re: GEF框架分析之一 2013-06-06 14:46 如雪

          非常好,謝謝!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 云南省| 高雄县| 清新县| 温泉县| 兴业县| 林甸县| 仪征市| 锡林浩特市| 汶上县| 河北区| 连江县| 北海市| 志丹县| 尼玛县| 凉城县| 保德县| 玉龙| 甘孜| 长武县| 巫山县| 大悟县| 龙海市| 游戏| 荥经县| 霍邱县| 沈阳市| 通江县| 海宁市| 台湾省| 安化县| 家居| 定陶县| 安龙县| 大名县| 绩溪县| 垫江县| 独山县| 曲麻莱县| 漳浦县| 内乡县| 英山县|