91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何自定義Eclipse菜單項實現去除多余的UI圖標

發布時間:2021-12-13 17:43:03 來源:億速云 閱讀:197 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關如何自定義Eclipse菜單項實現去除多余的UI圖標的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Eclipse的擴展機制是其一個重要特色,但隨著Eclipse功能越做越強,插件越來越多,你會發現GUI上的圖標越來越多,Menu,toolbar,context menu都被占滿了,其實很多item并不是我們需要的,但是contribute這些item的插件我們是需要的,那怎么去掉它們擴展的那些菜單項呢?

自定義Eclipse菜單項:在Plugin.xml中定制

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

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

< 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里面也包含一個action,但這個action在popupmenu里出現是有條件的:我們給它定義了一個nameFilter, 只有當selection()的path中包含了"example"才會顯示,否則這個action是不會出現在 popupmenu里的.這里的selection假設選中的是一個File,如果選中的是你自己寫的類,那namefilter會在你的類的toString方法里面找keyword.

自定義Eclipse菜單項.使用Eclipse的Activities擴展

plugin.xml并不能解決所有問題,當我們實在沒有辦法在plugin.xml中限制某些extension的出現的時候,可以考慮使用Eclipse的Activities.Activities的官方定義大家可以google一下eclipse的help.我個人的理解就是它可以和perspective一樣控制UI的顯示,但是Perspective設計的太易于擴展了,假如Plugin A在perspective上擴展了一個UI,那么Plugin B在每次進入這個perspective的時候就一定可以看得見它,而且在Eclipse的擴展機制下,Plugin B是沒有權利去刪了Plugin A的contribution的(Eclipse的ExtensionRegistry倒是提供了一個removeExtension方法,但運行的時候會報錯).在這樣的情況下,Activities的價值就體現出來了,你只要給它一個Extension的id,它就可以幫你把這個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中擴展了 org.eclipse.ui.newWizards,id是mywizard,那么上面這個activityPatternBinding就會disable掉my.example的mywizard擴展,你在 GUI中就看不見這個wizard了.pattern是支持正則表達式的,所以如果有"."的話需要用轉義字符\.注意,這里的disable的意思并不是說我把mywizard這個擴展刪掉了,而是屏蔽了它,mywizard仍然在 ExtensionRegistry中.

自定義Eclipse菜單項.用代碼來動態控制UI

方法2只是隱藏掉一些擴展,但是有一些需求并不是簡單的隱藏就可以了,我最近碰到的一個需求就是:有一個flag,只有當flag==1的時候擴展是可見的,否則是不可見的,需要disable這個擴展.這時就必須要加一些代碼才能實現了,還是以方法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的,當你在plugin.xml中定義好了一個Activity,缺省它是disable的,就是說activityPatternBinding 匹配的擴展是會被disable的,但你也可以把Activities設成enable的(在plugin.xml或者用代碼都可以設置),它匹配的擴展是可以正常使用的.

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

感謝各位的閱讀!關于“如何自定義Eclipse菜單項實現去除多余的UI圖標”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

廊坊市| 新蔡县| 长岛县| 昌黎县| 宾川县| 房产| 托克逊县| 鄂托克前旗| 巍山| 河西区| 清河县| 霍城县| 安塞县| 揭东县| 太仓市| 嵩明县| 芜湖市| 通海县| 山西省| 连平县| 山阴县| 宿迁市| 江北区| 甘孜| 林州市| 沾益县| 大兴区| 锡林郭勒盟| 兴仁县| 西乌珠穆沁旗| 武鸣县| 石阡县| 昂仁县| 顺义区| 恭城| 固原市| 连南| 巴青县| 贵阳市| 叙永县| 弋阳县|