[Eclipse]GEF入门系列(序)
前些天換了新電腦,本人一直處于興奮中,基本是"不務(wù)正業(yè)"的狀態(tài)。快過年了,雖然沒什么動(dòng)力干活,但我玩游戲技術(shù)比較差,魔獸3打電腦一家還很費(fèi)勁,干脆寫寫帖子就當(dāng)是休息吧!
由于工作的需要,最近開始研究GEF(Graphical Editor Framework)這個(gè)框架,它可以用來給用戶提供圖形化編輯模型的功能,從而提升用戶體驗(yàn),典型的應(yīng)用如圖形化的流程設(shè)計(jì)器、UML類圖編輯器等等。其實(shí)一年多來我們做的項(xiàng)目都是和它有關(guān)的,只是之前我具體負(fù)責(zé)的事情和它沒什么關(guān)系。那時(shí)也看過黃老大寫的代碼,EMF和GEF混在一起特別暈,沒能堅(jiān)持看下去。這次自己要?jiǎng)邮肿隽?#xff0c;正好趁此機(jī)會(huì)把它搞明白,感覺GEF做出來的東西給人很專業(yè)的感覺,功能也很強(qiáng)大,應(yīng)該挺有前途的。此外,GEF里用到了很多經(jīng)典模式,最突出的如大量應(yīng)用Command模式,方便的實(shí)現(xiàn)Undo/Redo功能等等,通過學(xué)習(xí)GEF,等于演練了這些模式,比只是看看書寫幾個(gè)類那種學(xué)習(xí)方式的效果好很多。
現(xiàn)在網(wǎng)上關(guān)于GEF的文章和教程還不是很多(比起一年前還是增加了幾篇),基本上都是eclipse.org上的那些,其中少數(shù)幾篇有中文版,中文的原創(chuàng)就屬于鳳毛麟角了,市場(chǎng)上似乎也沒有這方面的成書。GEF SDK里自帶的文檔則比較抽象,不適合入門。我覺得最好的入門方法是結(jié)合具體的例子,一邊看代碼,一邊對(duì)照文檔,然后自己再動(dòng)手做一做。當(dāng)然這個(gè)例子要簡(jiǎn)單點(diǎn)才好,像GEF的那個(gè)logic的例子就太復(fù)雜了,即使是flow(運(yùn)行界面見下圖)我覺得也有點(diǎn)大;另外例子要比較規(guī)范的,否則學(xué)成錯(cuò)誤的路子以后還要花時(shí)間改就不值得了。
用GEF編寫的流程編輯器
GEF的結(jié)構(gòu)決定了GEF應(yīng)用程序的復(fù)雜性,即使最最簡(jiǎn)單的GEF程序也包含五六個(gè)包和十幾個(gè)類,剛開始接觸時(shí)有點(diǎn)暈是很正常的。我找到一個(gè)還不錯(cuò)的例子,當(dāng)然它很簡(jiǎn)單了,如果你現(xiàn)在就想自己試試GEF,可以點(diǎn)這里下載一個(gè)zip包(若已無法下載請(qǐng)用這個(gè)鏈接),展開后是六個(gè)項(xiàng)目(pt1,pt2,…,pt6),每一個(gè)是在前面一個(gè)的基礎(chǔ)上增加一些功能得到的,pt1是最簡(jiǎn)單的一個(gè),這樣你就可以看到那些典型的功能(例如DirectEdit、Palette等等)在GEF里應(yīng)該怎樣實(shí)現(xiàn)了。關(guān)于這個(gè)例子的更多信息請(qǐng)看作者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.”
需要注意一點(diǎn),這個(gè)例子應(yīng)該是在Eclipse 2.1里寫的,所以如果你想在Eclipse 3里運(yùn)行這個(gè)例子,要修改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這個(gè)類finish()方法里page.openEditor(newFile);這句改為page.openEditor(new FileEditorInput(newFile),"com.jtauber.river.editor");,還有一些warning不太影響,可以不用管。
或者如果你不是特別著急的話,留意我這個(gè)半新手寫的GEF入門系列帖子,說不定能引起你更多的共鳴,也是一個(gè)辦法吧。
GEF的學(xué)習(xí)周期是比較長(zhǎng)的,學(xué)之前應(yīng)該有這個(gè)心理準(zhǔn)備。特別是如果你沒有開發(fā)過Eclipse插件,那么最好先花時(shí)間熟悉一下Eclipse的插件體系結(jié)構(gòu),這方面的文章還是很多的,也不是很難,基本上會(huì)開發(fā)簡(jiǎn)單的Editor就可以了,因?yàn)镚EF應(yīng)用程序一般都是在Editor里進(jìn)行圖形編輯的。另外,絕大多數(shù)GEF應(yīng)用程序都是基于Draw2D的,可以說GEF離不開Draw2D,而后者有些概念很難搞明白,加上其文檔比GEF更少,所以我會(huì)從Draw2D開始說起,當(dāng)然不能講得很深入,因?yàn)槲易约阂彩锹灾っ选?/p>
說實(shí)話,我對(duì)寫這個(gè)系列不太有信心,因?yàn)樽约阂彩莿側(cè)腴T而已。但要是等到幾個(gè)月后再寫,很多心得怕是講不出來了。所以還是那句話,有什么寫錯(cuò)的請(qǐng)指正,并且歡迎交流。
總結(jié)
以上是生活随笔為你收集整理的[Eclipse]GEF入门系列(序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和AI机器人Alice的一段聊天记录
- 下一篇: [转帖]经典好文!看完后感到很震撼!