[Eclipse]GEF入门系列(序)
前些天換了新電腦,本人一直處于興奮中,基本是"不務正業"的狀態。快過年了,雖然沒什么動力干活,但我玩游戲技術比較差,魔獸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開始說起,當然不能講得很深入,因為我自己也是略知皮毛而已。
說實話,我對寫這個系列不太有信心,因為自己也是剛入門而已。但要是等到幾個月后再寫,很多心得怕是講不出來了。所以還是那句話,有什么寫錯的請指正,并且歡迎交流。
總結
以上是生活随笔為你收集整理的[Eclipse]GEF入门系列(序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和AI机器人Alice的一段聊天记录
- 下一篇: 飞凡F7首台批产试制车下线 将于3月底上