很久很久以前

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            34 隨筆 :: 4 文章 :: 17 評論 :: 0 Trackbacks
          ??????? GEF中的起到關(guān)鍵作用的是EditPart,而EditPart中起到關(guān)鍵作用的是EditPolicy,現(xiàn)在來描述一下GEF是如何創(chuàng)建一個(gè)圖形并顯示顯示出來的。
          ??????? 首先通過單擊調(diào)色板,會調(diào)用一個(gè)實(shí)現(xiàn)org.eclipse.gef.requests.CreationFactory接口的工廠類,這個(gè)是我們在注冊相應(yīng)的ToolEntry時(shí)聲明的,通過傳入的參數(shù)這個(gè)工廠類就知道應(yīng)該創(chuàng)建一個(gè)什么類型的model元素。(注意,這時(shí)候因?yàn)槲覀冎皇羌儎?chuàng)建了一個(gè)模型元素,對于它的父元素,位置信息等等都還不清楚,所以一般我們在設(shè)置模型元素的構(gòu)造函數(shù)時(shí)需要有個(gè)無參數(shù)的構(gòu)造方法(或者有默認(rèn)參數(shù)的構(gòu)造函數(shù))。)
          ??????? 當(dāng)單擊畫布上的某個(gè)位置后,相應(yīng)的信息比如 模型的父元素,位置信息等等都已經(jīng)可以確定,將這些信息以及新創(chuàng)建的模型元素本身包裝成request傳給相應(yīng)的EditPart(就是鼠標(biāo)單擊處所在的圖形元素對應(yīng)的EditPart)。
          ??????? 這個(gè)EditPart會將這個(gè)request傳給相應(yīng)的EditPolicy(至于怎么傳遞,還不清楚,估計(jì)是這樣的,EditPart會傳給注冊在其上的所有EditPolicy,而每個(gè)EditPolicy都有個(gè)getCommand方法,通過request的type交給相應(yīng)的getXXXCommand方法。查看了一下源代碼,發(fā)現(xiàn)在AbastractEditPart中有個(gè)getCommand方法正是將每個(gè)EditPolicy中的getCommand方法都調(diào)用了一遍)。
          ???????然后EditPolicy處理相應(yīng)的request,具體的就是調(diào)用getXXXCommad方法得到處理相應(yīng)request的Command,Command是可以改變模型。上面提到的這種EditPolicy屬于NonGraphical類型,GEF中還包括了一種稱為Graphical類型的EditPolicy,這種EditPolicy不對模型進(jìn)行處理,只是用來修改圖形顯示(似乎這種說法不正確,它可以更改視圖元素的位置,在業(yè)務(wù)模型和視圖模型統(tǒng)一的情況下,這種圖形EditPolicy也會更改模型);而NonGraphical的EditPolicy則是不清楚圖形元素的,但它可以對模型進(jìn)行更改,因此這種EditPolicy在不同view之間是可以通用的。
          ?????? 當(dāng)模型發(fā)生改變后,注冊再其上的EditPart將會得到相應(yīng)的通知,此時(shí),通過通知中的property信息,EditPart會refreshVisual或者refreshChildren,從而使視圖發(fā)生改變。
          posted on 2006-04-09 12:33 Long Long Ago 閱讀(631) 評論(0)  編輯  收藏 所屬分類: GEFEclipse
          主站蜘蛛池模板: 潞西市| 横山县| 青海省| 常德市| 班戈县| 延津县| 江山市| 同德县| 鱼台县| 武功县| 临漳县| 上犹县| 平昌县| 武山县| 吐鲁番市| 林甸县| 钟祥市| 自治县| 旺苍县| 温泉县| 五指山市| 宜良县| 横峰县| 黑河市| 海原县| 富源县| 通榆县| 宜宾市| 新巴尔虎左旗| 固阳县| 壤塘县| 东乌珠穆沁旗| 东城区| 和田市| 南陵县| 平南县| 马公市| 长丰县| 宣汉县| 内江市| 玉门市|