`
yianpuodiaotu
  • 浏览: 241707 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

在Eclipse中去掉多余的UI组件的几个方法

阅读更多

『找不到这篇文章的真正出处了,如有侵权嫌疑,请联系我。』

 

Eclipse的扩展机制是其一个重要特色,但随着Eclipse功能越做越强,插件越来越多,你会发现GUI上的图标越来越 多,Menu,toolbar,context menu都被占满了,其实很多item并不是我们需要的,但是contribute这些item的插件我们是需要的,那怎么去掉它们扩展的那些菜单项呢?

 

1.在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.

2.使用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中。

 

3.用代码来动态控制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+android开发环境搭建

    - 在Eclipse中打开Window -&gt; Preferences -&gt; Android,设置SDK Location为之前解压的Android SDK路径。 - 确认SDK Platforms中已安装Android 1.6或以上版本的API。 - 可选:安装额外的Eclipse插件以提高开发效率...

    heritrix-1.4.4 源代码(eclipse可执行)

    在Eclipse的“Run Configurations”中创建一个新的Java Application配置,指定主类(通常是包含主方法的Heritrix启动类),然后设置必要的环境变量和参数。 5. **自定义与扩展**:Heritrix的设计允许用户根据需求...

    Eclipse+WebSphere部署WAR应用

    部署WAR应用涉及到以下几个步骤: - 将WAR文件复制到WebSphere服务器的应用部署目录下,例如`d:\待部署的应用`。 - 在WebSphere控制台中选择“安装新的应用程序”,输入WAR文件的本地路径和上下文根。 - 按照向导的...

    nutch爬虫+java+eclipse

    在爬虫开发中,Java的优势主要体现在以下几个方面: 2.1 强大的网络库:Java提供了丰富的网络编程API,如HttpURLConnection和HttpClient,可以方便地处理HTTP请求和响应。 2.2 解析库:Java有许多强大的HTML和XML...

    windowbuilderpro的安装问题解决

    安装 WindowBuilderPro 的过程中需要注意几个关键步骤: 1. 下载:用户可以从多个站点下载该软件,包括国外站点和国内镜像站点。下载时需要注意选择与所使用的 Eclipse 版本相对应的安装包。 2. 安装过程:...

    SVN服务器插件安装

    安装Eclipse的SVN插件主要包含以下几个步骤: 1. 下载SVN插件:可以到指定的URL下载适合Eclipse版本的SVN插件,例如此处提到的“svn-site-1.10.11.zip”文件。 2. 安装新软件:在Eclipse中依次选择“Help”-&gt;...

    Spket插件替换包消除license校验

    例如,在Eclipse中,它可能在"eclipse\plugins"目录下。 3. **替换jar包**:将下载的"com.spket.ui_1.6.23.jar"复制到Spket的安装目录,替换原来的"com.spket.ui_1.6.18.jar"。确保新jar包与旧jar包的文件名保持...

    myEclipse安装说明

    这意味着,在安装过程中,MyEclipse会将必要的组件放置到Eclipse的“dropins”目录下,以此来完成其功能的扩展。 #### 三、Dropins目录结构与链接配置 为了更好地理解和管理MyEclipse的安装,我们需要关注...

    MSTRWebcustomization开发示例.pdf

    6. URL参数和请求格式:提供了几个MicroStrategy的Web请求URL实例。这些URL包含了多个参数,用于与服务器端的mstrWeb servlet交互。这些参数可以指定服务器地址、项目名称、端口、事件类型、报告ID、视图模式、用户...

    android 游戏入门demo MyFirstGame

    Android项目的目录结构通常包括以下几个部分: - `.classpath`: 这是Eclipse(一个早期的Android开发IDE)的配置文件,用于指定项目中包含的类路径。 - `ic_launcher-web.png`: 应用的启动图标,展示在设备或...

    Java code Java code

    在Java代码中,我们通常会遇到以下几个关键概念: 1. 类(Class):类是面向对象编程的核心,它是创建对象的模板。在Java中,一切皆为对象,类定义了对象的属性(变量)和行为(方法)。 2. 对象(Object):对象...

    仿QQ的滑动删除listview的itme

    要实现这个功能,我们需要以下几个关键步骤: 1. **创建SwipeMenuListView**:首先,你需要创建一个自定义的`SwipeMenuListView`,这个组件继承自`ListView`,并添加了滑动手势检测和菜单展示的逻辑。在代码中,这...

    weka3.6源代码

    Weka的核心组件包括以下几个部分: - **数据预处理**:这部分包含了对原始数据进行清洗、转换和归一化的工具,如去除缺失值、特征缩放、属性选择等。 - **学习算法**:Weka支持多种机器学习算法,如决策树(C4.5, ...

    ibator插件+ibatorConfig文件

    这个文件通常包含以下几个关键部分: 1. **数据库连接信息**:包括数据库驱动类名、URL、用户名和密码,这些信息用于建立与数据库的连接。 2. **表选择和排除**:你可以在这里指定要生成代码的表,也可以设置...

    JAVA入门教程【推荐】.doc

    【JAVA入门教程】 Java是一种由SUN公司(现...在Java中,public class定义一个公共类,void表示方法无返回值。在实际编程中,我们需要根据需求定义类,创建对象,并通过对象调用方法或访问数据成员,实现程序的功能。

    Java实现登陆案例servlet

    在这个登录案例中,我们通常会包含以下几个核心组件: 1. **HTML表单**:客户端的登录界面通常由HTML编写,包含用户名和密码输入框,以及提交按钮。表单的`action`属性指向服务器上的Servlet地址,`method`属性指定...

    MeyboMail Web(Java)开源简化版.zip

    在【压缩包子文件的文件名称列表】中,我们可以看到以下几个关键文件和目录: 1. `.classpath`:这是Eclipse IDE的配置文件,包含了项目的类路径信息,用于指导编译和运行时的依赖管理。 2. `norights.htm`、`...

    Java.Testing.with.Spock.2016

    - **Blocks**:测试案例中的不同行为被分为几个块,例如`given`, `when`, `then`, `expect`, 和 `where`等。 - **Data Driven Blocks**:`where`块用于编写数据驱动测试,允许测试用例参数化。 3. **Spock测试...

    ( MyEclipse 优化(全).txt )

    通过以上几个方面的优化,可以显著提升MyEclipse的性能和响应速度,使得开发工作更加高效。值得注意的是,在进行任何配置修改之前,请确保备份原始配置文件,以便在出现问题时能够迅速恢复到原始状态。此外,根据...

Global site tag (gtag.js) - Google Analytics