在Eclipse RCP中使用ResourceNavigator

          Posted on 2007-06-28 00:30 nemo 閱讀(3593) 評論(12)  編輯  收藏 所屬分類: EclipseRCP/SWT/JFACE
          Eclipse 的資源瀏覽器很強大,可以很方便的查看工作空間中可供適配的資源,并且提供了對排序、過濾等功能的支持。Eclipse的RCP項目組不贊成我們在富客戶端應(yīng)用程序中使用ResourceNavigator,原因是ResourceNavigator的實現(xiàn)代碼位于Eclipse IDE中,如果使用資源瀏覽器,生成的RCP產(chǎn)品將會增加二十多兆的空間,而且會增加許多我們的產(chǎn)品中并不使用的功能,很浪費磁盤和系統(tǒng)資源。他們贊成我們根據(jù)需要,為應(yīng)用程序量身定做樹形瀏覽器視圖,但是,基于方便和對強大功能的追求,以及對Eclipse代碼優(yōu)良性的肯定,插件開發(fā)者們?nèi)匀幌M麑①Y源瀏覽器直接加入到我們的RCP程序中。為了滿足廣大Eclipse開發(fā)者強烈的要求,本文對在Eclipse RCP中使用ResourceNavigator的方法做較為全面的介紹。

          同資源導(dǎo)航器相關(guān)的ID為:
          ID:           org.eclipse.ui.views.ResourceNavigator
             CLASS:   org.eclipse.ui.ide/org.eclipse.ui.views.navigator/ResourceNavigator.class
             ICON:      位于org.eclipse.ui.ide工程目錄的icons文件夾中,名稱為fileNav_nav.gif。可通過解壓.jar文件獲得圖像文件。

          1. 如果我們的RCP程序中的默認(rèn)透視圖中要使用導(dǎo)航器,可能需要在RCP插件(包含有Application.java文件的插件)的plugin.xml中加入這個視圖:
          plugin.xml

          2. 如果我們需要在RCP程序中默認(rèn)顯示導(dǎo)航器,則需要在定義的透視圖(假設(shè)透視圖已經(jīng)定義)類中加入類似下面的代碼:
          Perspective.java

          第1、2兩行創(chuàng)建一個IFolderLayout實例,表示在編輯器區(qū)域左側(cè)創(chuàng)建一個FolderLayout。
          第3行為ResourceNavigator添加一個占位符,使用的是ResourceNavigator的ID,后面的“:*”表示還可以有更多的內(nèi)容,即可以同更多的視圖共享這個位置。
          第4行將ResourceNavigator加入這個布局中,從而在應(yīng)用程序啟動,默認(rèn)透視圖打開時,導(dǎo)航器出現(xiàn)在頁面的左側(cè)。

          3. 導(dǎo)航器在RCP程序中無法顯示的問題。
          許多開發(fā)者在使用Navigator生成RCP程序時都遇到過這樣的錯誤:
          Log

          這個問題的具體描述我已經(jīng)在前面的博客中介紹了,它需要安裝兼容性插件同以前的系統(tǒng)兼容。在PDE環(huán)境下,打開plugin.xml,在“Dependencies”頁面中加入下面的插件:
          org.eclipse.core.runtime.compatibility

          上述所說的問題便解決了。

          4. 工作空間的資源在導(dǎo)航器中無法顯示的問題。
          解決了第三個問題后,導(dǎo)航器中的資源可以顯示了,但是其中的工程文件夾圖標(biāo)仍然無法顯示,只能光禿禿的顯示一個項目名,如下圖所示:


          為了正確的顯示項目的圖標(biāo),我們需要在RCP插件的ApplicationWorkbenchAdvisor類中加入如下代碼:
          ApplicationWorkbenchAdvisor

          上面代碼的第4行中的路徑"icons/prj_obj.gif"為我們?yōu)楣こ涛募A提供的圖標(biāo)相對于RCP插件中的位置,YOURPlugin代表RCP插件中的插件類(或XXXActivator)
          這樣我們便得到了我們希望的Navigaotor:


          上面3-4行代碼也同時給我們提供了修改Eclipse Navigator中默認(rèn)圖標(biāo)的一種方式。Just Enjoy it!


          其他的話:

          Eclipse 3.2版本出臺后,Eclipse團(tuán)隊專門提供出了org.eclipse.ui.navigator插件,用來支持在ProjectExplorer的基礎(chǔ)上進(jìn)行的二次開發(fā)。而從GMF(Grapic Modeling Framework)2.0 M6開始,對自動生成樹形瀏覽器視圖提供了支持,所用到的正是這個插件所提供的功能強大的 org.eclipse.ui.navigatorContent擴展點:http://wiki.eclipse.org/index.php/GMF_New_and_Noteworthy#2.0_M6,這使得我們在對資源定制的基礎(chǔ)上,可以對資源中的元素進(jìn)行定制,因而功能更為強大(不過這個擴展點是我見過的最為復(fù)雜的擴展點之一)。這使得我們對ResourceNavigator的要求有所降低。Anyway,直接使用Eclipse的ResourceNavigator可以為快速定制的原型系統(tǒng)提供基本的支持,這對開發(fā)者來說還是非常有用的。

          Feedback

          # re: 在Eclipse RCP中使用ResourceNavigator  回復(fù)  更多評論   

          2007-06-30 12:56 by nemo
          現(xiàn)在,隨著激動人心的eclipse3.3的正式發(fā)布,令人慶幸的一件事情發(fā)生了:eclipse中的IDE被移植到了單獨的包中:

          IDE application moved to new plug-in
          The portion of the org.eclipse.ui.ide plug-in that defines the application has been moved into a new plug-in: org.eclipse.ui.ide.application. This allows people writing their own RCP application to use existing views or APIs defined by org.eclipse.ui.ide without having a dependency on the application.

          # re: 在Eclipse RCP中使用ResourceNavigator[未登錄]  回復(fù)  更多評論   

          2007-10-10 15:22 by z
          “在Eclipse RCP中使用ResourceNavigator”文章中,我建立的項目中navigator不僅不顯示圖片,連項目名和文件名都不顯示。不知道是什么原因,希望可以指點一下。

          # re: 在Eclipse RCP中使用ResourceNavigator  回復(fù)  更多評論   

          2007-10-10 15:26 by dashan
          你好,麻煩你能給講一下YOURPlugin代表的具體是什么嗎,我沒有理解你文章里說的意思?

          # re: 在Eclipse RCP中使用ResourceNavigator[未登錄]  回復(fù)  更多評論   

          2007-10-11 10:20 by nemo
          to z:
          這個問題可能是因為沒有引用org.eclipse.ui.ide的緣故,或者新版本的org.eclipse.ui.ide已經(jīng)將ResourceNavigator從該項目包中去掉(這個我不是很了解,最近沒有跟蹤Eclipse3.3版本)。最好能夠提供一些具體的細(xì)節(jié)。

          to dashan:
          YOURPlugin是你的插件類,在Eclipse3.1以后使用了OSGi技術(shù),是指插件的Activator類。

          # re: 在Eclipse RCP中使用ResourceNavigator[未登錄]  回復(fù)  更多評論   

          2007-10-11 16:34 by z
          navigator 基本可以用了,但是,我在navigator中建立的文件再次打開的時候只能得到它的相對路徑,有沒有辦法讓文件再次打開時得到絕對路徑(謝謝你的解答)

          # re: 在Eclipse RCP中使用ResourceNavigator[未登錄]  回復(fù)  更多評論   

          2007-10-11 17:32 by nemo
          不太懂你的意思。你是指想要以編程的方式來獲得文件的絕對路徑么?應(yīng)該可以吧。resource中有g(shù)etAbsolutePath()方法吧。。。?

          # re: 在Eclipse RCP中使用ResourceNavigator  回復(fù)  更多評論   

          2007-10-24 16:25 by homer
          樓主好:我按照你說的方法設(shè)置了ResourceNavigator后,把org.eclipse.ui.ide.jar包也導(dǎo)入工程了,org.eclipse.core.runtime.compatibility包也加入了,但是報下面的錯誤信息,rcp工程啟動不了,請幫忙看一下是什么原因?謝謝!

          java.lang.RuntimeException: Application "GefTest.application" could not be found in the registry. The applications available are: org.eclipse.ant.core.antRunner.
          at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:216)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
          at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:585)
          at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
          at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
          at org.eclipse.core.launcher.Main.run(Main.java:973)
          at org.eclipse.core.launcher.Main.main(Main.java:948)

          # re: 在Eclipse RCP中使用ResourceNavigator[未登錄]  回復(fù)  更多評論   

          2007-10-25 10:43 by nemo
          @homer
          這個問題應(yīng)該是你的GefTest.application沒有被找到。跟ResourceNavigator類關(guān)系不大。你可以查看一下你RCP插件(擁有Application類的插件)中的Application類所在的插件工程的plugin.xml中,org.eclipse.core.runtime.application擴展點中察看一下你所指定的Application類對不對,以及Application Id 和你在XXX.product中所指定的Id是否一致(如果擁有產(chǎn)品文件的話)。
          如果沒有問題的話,確保你的RCP插件中的插件依賴項和xxx.product中的依賴項一致。
          還有可能是依賴項的順序問題...這就比較麻煩了。

          # re: 在Eclipse RCP中使用ResourceNavigator  回復(fù)  更多評論   

          2007-10-26 13:02 by homer
          謝謝!nemo,我想建一個自己的導(dǎo)航器,麻煩你能告訴我擴展ResourceNavigator時怎么做嗎?直接繼承是不是不行?謝謝,我剛剛學(xué)習(xí)GEF,很多都不懂,別見笑。

          # re: 在Eclipse RCP中使用ResourceNavigator[未登錄]  回復(fù)  更多評論   

          2007-10-26 14:38 by nemo
          @homer
          可以直接擴展ResourceNavigator,網(wǎng)上有相關(guān)的文章:

          http://www.cnblogs.com/Aimd/archive/2006/05/15/400753.html

          不知道你有什么樣的需求,如果是基于GEF/EMF做的話,可以考慮使用ProjectExplorer。如果你要保留Eclipse資源所支持的大部分功能,在此基礎(chǔ)上定制一些自己的樹結(jié)點,只要擴展org.eclipse.ui.navigator.navigatorContent擴展點,定義一些triggerpoint,并且自己提供navigatorContentProvider, navigatorLableProvider, navigatorActionProvider,就可以達(dá)到此目的。

          nemo

          # re: 在Eclipse RCP中使用ResourceNavigator  回復(fù)  更多評論   

          2007-10-26 16:38 by homer
          @nemo
          謝謝,我試試,遇到不懂的地方再向你請教。能夠留一下你的郵箱嗎?我的mail是homer4503@126.com

          # re: 在Eclipse RCP中使用ResourceNavigator  回復(fù)  更多評論   

          2007-10-26 20:03 by homer
          @nemo
          nemo,你好,請問在gef中如何把view和editpart聯(lián)系起來呢?

          posts - 21, comments - 74, trackbacks - 0, articles - 3

          Copyright © nemo

          主站蜘蛛池模板: 罗定市| 临洮县| 伊通| 赤峰市| 五寨县| 筠连县| 忻州市| 合川市| 大同县| 五大连池市| 鲜城| 巴楚县| 南郑县| 游戏| 张家口市| 汾阳市| 闻喜县| 崇信县| 蓝田县| 普安县| 罗田县| 辽阳市| 青铜峡市| 巫溪县| 连城县| 梨树县| 临沧市| 开封县| 宁夏| 连平县| 乌兰察布市| 吴桥县| 漯河市| 德令哈市| 东阿县| 湘乡市| 剑河县| 卓尼县| 正定县| 屏东县| 苏尼特左旗|