You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RCP的Class1中判断触发的是menuItem1还是menuItem2?

解决方案:区分触发的右键菜单项

可以实现,但Eclipse RCP中没有直接的get_MenuItem_Selected()方法,需要通过传递参数的方式来区分不同菜单项,具体实现步骤如下:

1. 在右键菜单扩展中添加标识参数

在plugin.xml的菜单定义里,给两个菜单项分别配置唯一标识参数:

  • 若使用popupMenus扩展点:
<extension point="org.eclipse.ui.popupMenus">
  <objectContribution
        id="your.plugin.id.menu1"
        objectClass="你的目标对象类">
    <action
          class="org.eclipse.ui.actions.RetargetAction"
          id="your.plugin.id.action1"
          label="menuItem1"
          menubarPath="additions">
      <parameter name="triggerMenuId" value="menuItem1"/>
    </action>
  </objectContribution>
  <objectContribution
        id="your.plugin.id.menu2"
        objectClass="你的目标对象类">
    <action
          class="org.eclipse.ui.actions.RetargetAction"
          id="your.plugin.id.action2"
          label="menuItem2"
          menubarPath="additions">
      <parameter name="triggerMenuId" value="menuItem2"/>
    </parameter>
  </objectContribution>
</extension>
  • 若使用commands+handlers标准扩展方式(更推荐):
<extension point="org.eclipse.ui.commands">
  <command id="your.plugin.id.openClass1" name="打开Class1">
    <commandParameter
          id="triggerMenuId"
          name="菜单标识"
          optional="false"/>
  </command>
</extension>

<extension point="org.eclipse.ui.handlers">
  <handler commandId="your.plugin.id.openClass1" class="你的Handler类路径">
    <parameter
          name="triggerMenuId"
          value="menuItem1"/>
  </handler>
  <handler commandId="your.plugin.id.openClass1" class="你的Handler类路径">
    <parameter
          name="triggerMenuId"
          value="menuItem2"/>
  </handler>
</extension>

2. 在启动Class1时传递参数

通过Handler启动Class1时,在execute方法中提取参数并传递:

public Object execute(ExecutionEvent event) throws ExecutionException {
  String menuId = event.getParameter("triggerMenuId");
  // 实例化Class1并传递标识
  Class1 formPage = new Class1(editor, "pageId", "页面标题");
  formPage.setTriggerMenuId(menuId);
  // 加入编辑器并激活
  editor.addPage(formPage);
  editor.setActivePage(formPage);
  return null;
}

3. 在Class1中判断触发源

在Class1中添加成员变量保存标识,即可在任意逻辑中判断:

public class Class1 extends FormPage {
  private String triggerMenuId;

  public void setTriggerMenuId(String menuId) {
    this.triggerMenuId = menuId;
  }

  // 示例:根据触发菜单项执行不同逻辑
  private void handleMenuTrigger() {
    if ("menuItem1".equals(triggerMenuId)) {
      // 处理menuItem1触发的业务逻辑
    } else if ("menuItem2".equals(triggerMenuId)) {
      // 处理menuItem2触发的业务逻辑
    }
  }
}

额外说明

如果是通过自定义MenuManager创建右键菜单,可直接给菜单项对应的Action设置data属性,后续在Class1中通过getSite()获取上下文数据即可。

内容的提问来源于stack exchange,提问作者jemrug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:23:15