真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何自定義Eclipse菜單項(xiàng)實(shí)現(xiàn)去除多余的UI圖標(biāo)

這篇文章給大家分享的是有關(guān)如何自定義Eclipse菜單項(xiàng)實(shí)現(xiàn)去除多余的UI圖標(biāo)的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),小程序設(shè)計(jì),十年建站對(duì)水電改造等多個(gè)方面,擁有多年的網(wǎng)站推廣經(jīng)驗(yàn)。

Eclipse的擴(kuò)展機(jī)制是其一個(gè)重要特色,但隨著Eclipse功能越做越強(qiáng),插件越來越多,你會(huì)發(fā)現(xiàn)GUI上的圖標(biāo)越來越多,Menu,toolbar,context menu都被占滿了,其實(shí)很多item并不是我們需要的,但是contribute這些item的插件我們是需要的,那怎么去掉它們擴(kuò)展的那些菜單項(xiàng)呢?

自定義Eclipse菜單項(xiàng):在Plugin.xml中定制

這是最簡(jiǎn)單的辦法,很多時(shí)候我們自己想寫代碼來去掉一些菜單項(xiàng),但效果并不好.所以能在Plugin.xml中定制的,我們就 盡量寫在plugin.xml里面.下面舉一個(gè)右鍵菜單的例子:

擴(kuò)展右鍵菜單需要擴(kuò)展org.eclipse.ui.popupMenus擴(kuò)展點(diǎn),我們一般都在它下面new一個(gè)action,但這個(gè)action擴(kuò)展之后不管在  任何界面都會(huì)出現(xiàn),如果我們想在某些條件下隱藏掉它該怎么辦?仔細(xì)觀察下org.eclipse.ui.popupMenus擴(kuò)展點(diǎn),其實(shí)我們還可以新建objectContribution擴(kuò)展

< extension       point="org.eclipse.ui.popupMenus"> < objectContribution          id="my.example.objectContribution"          nameFilter="*example*"          objectClass="java.io.File">       < action             class="my.example.MyAction"             id="my.example.MyAction"             label="Exe"             menubarPath="additional">       < /action>    < /objectContribution>  < /extension>

objectContribution里面也包含一個(gè)action,但這個(gè)action在popupmenu里出現(xiàn)是有條件的:我們給它定義了一個(gè)nameFilter, 只有當(dāng)selection()的path中包含了"example"才會(huì)顯示,否則這個(gè)action是不會(huì)出現(xiàn)在 popupmenu里的.這里的selection假設(shè)選中的是一個(gè)File,如果選中的是你自己寫的類,那namefilter會(huì)在你的類的toString方法里面找keyword.

自定義Eclipse菜單項(xiàng).使用Eclipse的Activities擴(kuò)展

plugin.xml并不能解決所有問題,當(dāng)我們實(shí)在沒有辦法在plugin.xml中限制某些extension的出現(xiàn)的時(shí)候,可以考慮使用Eclipse的Activities.Activities的官方定義大家可以google一下eclipse的help.我個(gè)人的理解就是它可以和perspective一樣控制UI的顯示,但是Perspective設(shè)計(jì)的太易于擴(kuò)展了,假如Plugin A在perspective上擴(kuò)展了一個(gè)UI,那么Plugin B在每次進(jìn)入這個(gè)perspective的時(shí)候就一定可以看得見它,而且在Eclipse的擴(kuò)展機(jī)制下,Plugin B是沒有權(quán)利去刪了Plugin A的contribution的(Eclipse的ExtensionRegistry倒是提供了一個(gè)removeExtension方法,但運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)).在這樣的情況下,Activities的價(jià)值就體現(xiàn)出來了,你只要給它一個(gè)Extension的id,它就可以幫你把這個(gè)Extension disable掉.例如:

< extension          point="org.eclipse.ui.activities">       < activity             id="my.example.activity"             name="WizardActivity">       < /activity>       < activityPatternBinding             activityId="my.example.activity"             pattern="my\.example/mywizard">       < /activityPatternBinding>  < /extension>

比較重要的是activityPatternBinding中的pattern屬性,它是由plugin id + "/" + local-id組成.比如在插件my.example中擴(kuò)展了 org.eclipse.ui.newWizards,id是mywizard,那么上面這個(gè)activityPatternBinding就會(huì)disable掉my.example的mywizard擴(kuò)展,你在 GUI中就看不見這個(gè)wizard了.pattern是支持正則表達(dá)式的,所以如果有"."的話需要用轉(zhuǎn)義字符\.注意,這里的disable的意思并不是說我把mywizard這個(gè)擴(kuò)展刪掉了,而是屏蔽了它,mywizard仍然在 ExtensionRegistry中.

自定義Eclipse菜單項(xiàng).用代碼來動(dòng)態(tài)控制UI

方法2只是隱藏掉一些擴(kuò)展,但是有一些需求并不是簡(jiǎn)單的隱藏就可以了,我最近碰到的一個(gè)需求就是:有一個(gè)flag,只有當(dāng)flag==1的時(shí)候擴(kuò)展是可見的,否則是不可見的,需要disable這個(gè)擴(kuò)展.這時(shí)就必須要加一些代碼才能實(shí)現(xiàn)了,還是以方法2中的mywizard為例:

IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();    IActivityManager activityManager = workbenchActivitySupport.getActivityManager();   Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());          if(flag==1)   {           if (enabledActivityIds.add("my.example.activity"))                workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);     }   else{            if(enabledActivityIds.remove("my.example.activity"))               workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);   }

Activities可以是enable或者disable的,當(dāng)你在plugin.xml中定義好了一個(gè)Activity,缺省它是disable的,就是說activityPatternBinding 匹配的擴(kuò)展是會(huì)被disable的,但你也可以把Activities設(shè)成enable的(在plugin.xml或者用代碼都可以設(shè)置),它匹配的擴(kuò)展是可以正常使用的.

在上面的code sample中,我們通過activityManager.getEnabledActivityIds()得到所有enable的Activities.如果flag==1,那my.example.activity 也應(yīng)該被加入到enable Activities中,這樣mywizard就可以顯示在界面上,反之,就要在enable Activities中remove掉my.example.activity,它就變成 disable,會(huì)把mywizard隱藏.

感謝各位的閱讀!關(guān)于“如何自定義Eclipse菜單項(xiàng)實(shí)現(xiàn)去除多余的UI圖標(biāo)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


標(biāo)題名稱:如何自定義Eclipse菜單項(xiàng)實(shí)現(xiàn)去除多余的UI圖標(biāo)
地址分享:http://weahome.cn/article/jjgjgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部