[Eclipse]GEF入門系列(一、Draw2D)

來源:互聯網
上載者:User

關於Java2D相信大家都不會陌生,它是基於AWT/Swing的二維圖形處理包, JDK附帶的示 常式序向我們展示了Java2D十分強大的圖形處理能力。在Draw2D出現以前,SWT應用程式在這 方面一直處於下風,而Draw2D這個SWT世界裡的Java2D改變了這種形勢。

可能很多人還不十分瞭解GEF和Draw2D的關係:一些應用程式是只使用Draw2D,看起來卻 和GEF應用程式具有相似的外觀。原因是什麼,下面先簡單解釋一下:

GEF是具有標準MVC(Model-View-Control)結構的圖形編輯架構,其中Model由我們自己 根據業務來設計,它要能夠提供某種模型改變通知的機制,用來把Model的變化告訴Control 層;Control層由一些EditPart實現,EditPart是整個GEF的核心組件,關於EditPart的機制 和功能將在以後的文章裡介紹;而View層(大多數情況下)就是我們這裡要說的Draw2D了, 其作用是把Model以圖形化的方式表現給使用者。

雖然GEF可以使用任何圖形包作為View層,但實際上GEF對Draw2D的依賴是很強的。舉例來 說:雖然EditPart(org.eclipse.gef.EditPart)介面並不要求引入任何Draw2D的類,但我 們最常使用的AbstractGraphicalEditPart類的createFigure()方法就需要返回IFigure類型 。由於這個原因,在GEF的SDK中索性包含了Draw2D包就不奇怪了,同樣道理,只有先瞭解 Draw2D才可能掌握GEF。

這樣,對於一開始提出的問題可以總結如下:Draw2D是基於SWT的圖形處理包,它適合用 作GEF的View層。如果一個應用僅需要顯示圖形,只用Draw2D就夠了;若該應用的模型要求以 圖形化的方式被編輯,那麼最好使用GEF架構。

現在讓我們來看看Draw2D裡都有些什麼,請看下圖。

圖1 Draw2D的結構

Draw2D通過被稱為LightweightSystem(以下簡稱LWS)的組件與SWT中的某一個Canvas實 例相連,這個Canvas在Draw2D應用程式裡一般是應用程式的Shell,在GEF應用程式裡更多是 某個Editor的Control(createPartControl()方法中的參數),在介面上我們雖然看不到LWS 的存在,但其他所有能看到的圖形都是放在它裡面的,這些圖形按父子內含項目關聯性形成一個樹 狀的階層。

LWS是Draw2D的核心組件,它包含三個主要組成部分:RootFigure是LWS中所有圖形的根, 也就是說其他圖形都是直接或間接放在RootFigure裡的;EventDispatcher把Canvas上的各種 事件指派給RootFigure,這些事件最終會被指派給適當的圖形,請注意這個RootFigure和你 應用程式中最頂層的IFigure不是同一個對象,前者是看不見的被LWS內部使用的,而後者通 常會是一個可見的畫布,它是直接放在前者中的;UpdateManager用來重繪圖形,當Canvas被 要求重繪時,LWS會調用它的performUpdate()方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.