自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自定義Eclipse菜單項:去除多余的UI圖標(biāo)

開發(fā) 后端
本文介紹如何自定義Eclipse的菜單項:去除GUI上多余的圖標(biāo)。

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

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

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

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

  1. < extension 
  2.       point="org.eclipse.ui.popupMenus"> 
  3. < objectContribution 
  4.          id="my.example.objectContribution" 
  5.          nameFilter="*example*" 
  6.          objectClass="java.io.File"> 
  7.       < action 
  8.             class="my.example.MyAction" 
  9.             id="my.example.MyAction" 
  10.             label="Exe" 
  11.             menubarPath="additional"> 
  12.       < /action> 
  13.    < /objectContribution> 
  14.  < /extension> 

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

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

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

  1. < extension 
  2.          point="org.eclipse.ui.activities"> 
  3.       < activity 
  4.             id="my.example.activity" 
  5.             name="WizardActivity"> 
  6.       < /activity> 
  7.       < activityPatternBinding 
  8.             activityId="my.example.activity" 
  9.             pattern="my\.example/mywizard"> 
  10.       < /activityPatternBinding> 
  11.  < /extension> 

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

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

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

  1. IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();   
  2.  IActivityManager activityManager = workbenchActivitySupport.getActivityManager();  
  3.  Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());   
  4.        if(flag==1)  
  5.  {  
  6.          if (enabledActivityIds.add("my.example.activity"))   
  7.              workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);    
  8.  }  
  9.  else{  
  10.           if(enabledActivityIds.remove("my.example.activity"))  
  11.              workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);  
  12.  }  

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

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

【編輯推薦】

  1. 六大便捷Eclipse JDT特性一覽
  2. 部署Eclipse RAP到Tomcat的步驟詳解
  3. Eclipse 3.5插件安裝與卸載的10個小竅門
  4. Eclipse平臺應(yīng)用與開發(fā)專題
  5. Eclipse 3.5年度穩(wěn)定版現(xiàn)已公開測試
責(zé)任編輯:yangsai 來源: BlogJava
相關(guān)推薦

2009-07-15 13:31:51

Swing菜單和菜單項

2011-08-29 10:38:42

用LINQ去除重復(fù)菜單

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2009-06-08 20:13:36

Eclipse自定義控

2010-01-13 15:33:40

VB.NET菜單項目

2009-08-27 09:38:02

Windows 7開始菜單

2009-09-17 09:51:18

Eclipse JDT自定義跳轉(zhuǎn)

2022-05-18 07:44:13

自定義菜單前端

2011-04-25 14:26:32

Ubuntu菜單

2021-01-20 08:58:39

iOS 14桌面圖標(biāo)快捷指令

2009-06-25 14:53:35

自定義UI組件JSF框架

2021-09-15 10:19:15

鴻蒙HarmonyOS應(yīng)用

2011-03-02 10:24:23

DashboardAndroid用戶界面設(shè)計模板

2021-01-21 07:35:40

JenkinsUICSS

2011-12-06 09:48:24

Win7

2011-09-05 18:54:03

windowsUbuntu

2022-03-21 15:19:27

鴻蒙UI組件ets自定義

2013-03-28 11:32:07

微信菜單輕App

2013-03-25 17:26:09

點贊
收藏

51CTO技術(shù)棧公眾號