成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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中定制

這是最簡單的辦法,很多時(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ò)展

  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里面也包含一個(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掉.例如:

  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中擴(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ò)展,但是有一些需求并不是簡單的隱藏就可以了,我最近碰到的一個(gè)需求就是:有一個(gè)flag,只有當(dāng)flag==1的時(shí)候擴(kuò)展是可見的,否則是不可見的,需要disable這個(gè)擴(kuò)展.這時(shí)就必須要加一些代碼才能實(shí)現(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中定義好了一個(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隱藏.

【編輯推薦】

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

2009-07-15 13:31:51

Swing菜單和菜單項(xiàng)

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菜單項(xiàng)目

2009-08-27 09:38:02

Windows 7開始菜單

2009-09-17 09:51:18

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

2011-04-25 14:26:32

Ubuntu菜單

2022-05-18 07:44:13

自定義菜單前端

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)用

2022-03-21 15:19:27

鴻蒙UI組件ets自定義

2011-03-02 10:24:23

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

2021-01-21 07:35:40

JenkinsUICSS

2011-09-05 18:54:03

windowsUbuntu

2011-12-06 09:48:24

Win7

2013-03-28 11:32:07

微信菜單輕App

2021-09-14 15:13:18

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产黄色大片网站 | 日韩精品视频在线 | 国产 日韩 欧美 在线 | 欧美日韩综合精品 | 二区不卡 | 成人亚洲精品 | 久久久久国产 | 成人在线观看黄 | 成人三区四区 | 少妇一级淫片免费放播放 | 国产精品欧美一区二区三区不卡 | 国产精品成人一区二区 | 亚洲综合视频一区 | avtt国产 | 综合另类 | 最新国产在线 | 日韩精品在线看 | 国产精品99久久久久久大便 | 成人午夜电影在线观看 | 天天操天天干天天爽 | v片网站| 欧美一级www片免费观看 | 亚洲理论在线观看电影 | 国产一区二区三区在线视频 | 日本91av视频| 欧美美女爱爱视频 | 欧美精品福利视频 | 国产精品国产精品国产专区不片 | 久久精品99 | 麻豆久久久 | 精品影院 | 亚洲视频在线播放 | 国内精品免费久久久久软件老师 | 国产精品一区二区久久 | 久久精品高清视频 | 91福利网 | a级毛片毛片免费观看久潮喷 | 中文视频在线 | 99精品国自产在线观看 | 欧美日韩精品中文字幕 | 亚洲国产成人精品女人久久久 |