[Eclipse]GEF入門系列(序)

來源:互聯網
上載者:User

前些天換了新電腦,本人一直處於興奮中,基本是"不務正業"的狀態。快過年了,雖然沒什麼動力幹活,但我玩遊戲技術比較差,魔獸3打電腦一家還很費勁,乾脆寫寫文章就當是休息吧!

由於工作的需要,最近開始研究GEF(Graphical Editor Framework)這個架構,它可以用來給使用者提供圖形化編輯模型的功能,從而提升使用者體驗,典型的應用形化的流程設計器、UML類圖編輯器等等。其實一年多來我們做的項目都是和它有關的,只是之前我具體負責的事情和它沒什麼關係。那時也看過黃老大寫的代碼,EMF和GEF混在一起特別暈,沒能堅持看下去。這次自己要動手做了,正好趁此機會把它搞明白,感覺GEF做出來的東西給人很專業的感覺,功能也很強大,應該挺有前途的。此外,GEF裡用到了很多傳統模式,最突出的如大量應用Command模式,方便的實現Undo/Redo功能等等,通過學習GEF,等於演練了這些模式,比只是看看書寫幾個類那種學習方式的效果好很多。

現在網上關於GEF的文章和教程還不是很多(比起一年前還是增加了幾篇),基本上都是eclipse.org上的那些,其中少數幾篇有中文版,中文的原創就屬於鳳毛麟角了,市場上似乎也沒有這方面的成書。GEF SDK裡內建的文檔則比較抽象,不適合入門。我覺得最好的入門方法是結合具體的例子,一邊看代碼,一邊對照文檔,然後自己再動手做一做。當然這個例子要簡單點才好,像GEF的那個logic的例子就太複雜了,即使是flow(運行介面見)我覺得也有點大;另外例子要比較規範的,否則學成錯誤的路子以後還要花時間改就不值得了。

用GEF編寫的流程編輯器

GEF的結構決定了GEF應用程式的複雜性,即使最最簡單的GEF程式也包含五六個包和十幾個類,剛開始接觸時有點暈是很正常的。我找到一個還不錯的例子,當然它很簡單了,如果你現在就想自己試試GEF,可以點這裡下載一個zip包(若已無法下載請用這個連結),展開後是六個項目(pt1,pt2,…,pt6),每一個是在前面一個的基礎上增加一些功能得到的,pt1是最簡單的一個,這樣你就可以看到那些典型的功能(例如DirectEdit、Palette等等)在GEF裡應該怎樣實現了。關於這個例子的更多資訊請看作者blog上的說明:

“Back in March, I talked a little about my initial attempts writing an Eclipse Graphical Editor Framework (GEF) application. I wanted, then, to write a tutorial that essentially walked the reader through the various stages of the development of my first application. I even suggested some kind of versioned literate programming approach to writing the tutorial and the code at the same time.

I haven't had time since then to make any progress, but I did get the GEF application to the stage where I had put together a snapshot at each of six milestones. A few people have written to me over the last six months asking the status of my tutorial and I've sent them my six snapshots as a starting point.

It makes sense for me to just to offer them here.

You can download a ZIP file with the six snapshots at http://jtauber.com/2004/gef/gef.zip.

Hopefully they are still useful, even without a surrounding tutorial.”

需要注意一點,這個例子應該是在Eclipse 2.1裡寫的,所以如果你想在Eclipse 3裡運行這個例子,要修改plugin.xml裡的dependencies為:

<import plugin="org.eclipse.core.resources"/> <import plugin="org.eclipse.gef"/><import plugin="org.eclipse.ui"/> <import plugin="org.eclipse.core.runtime"/> <import plugin="org.eclipse.core.runtime.compatibility"/> <import plugin="org.eclipse.ui.views"/> 

再修改一下DiagramCreationWizard這個類finish()方法裡page.openEditor(newFile);這句改為page.openEditor(new FileEditorInput(newFile),"com.jtauber.river.editor");,還有一些warning不太影響,可以不用管。

或者如果你不是特別著急的話,留意我這個半新手寫的GEF入門系列文章,說不定能引起你更多的共鳴,也是一個辦法吧。

GEF的學習周期是比較長的,學之前應該有這個心理準備。特別是如果你沒有開發過Eclipse外掛程式,那麼最好先花時間熟悉一下Eclipse的外掛程式體繫結構,這方面的文章還是很多的,也不是很難,基本上會開發簡單的Editor就可以了,因為GEF應用程式一般都是在Editor裡進行圖形編輯的。另外,絕大多數GEF應用程式都是基於Draw2D的,可以說GEF離不開Draw2D,而後者有些概念很難搞明白,加上其文檔比GEF更少,所以我會從Draw2D開始說起,當然不能講得很深入,因為我自己也是略知皮毛而已。

說實話,我對寫這個系列不太有信心,因為自己也是剛入門而已。但要是等到幾個月後再寫,很多心得怕是講不出來了。所以還是那句話,有什麼寫錯的請指正,並且歡迎交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.