当前位置: 首页 > news >正文

Eclipse 插件开发 3 菜单栏

Eclipse 插件开发 3 菜单栏

  • 1 增加菜单
  • 2 指定位置
  • 3 点击事件
  • 4 二级菜单 (静态)
  • 5 二级菜单 (动态)

位置locationURI备注
菜单栏menu:org.eclipse.ui.main.menu添加到传统菜单
工具栏toolbar:org.eclipse.ui.main.toolbar添加到工具栏

1 增加菜单

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin><extension point="org.eclipse.ui.menus"><menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"><menu id="com.xu.learn.menus.sampleMenu" label="一级菜单"><command commandId="com.xu.learn.commands.sampleCommand" id="com.xu.learn.menus.sampleCommand"></command></menu></menuContribution></extension></plugin>

在这里插入图片描述

2 指定位置

XML字段含义
extension.menuContributionlocationURI菜单栏位置 menu:org.eclipse.ui.main.menu?after=additions,如Window就是window
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin><extension point="org.eclipse.ui.menus"><menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=window"><menu id="com.xu.learn.menus.sampleMenu" label="一级菜单"><command commandId="com.xu.learn.commands.sampleCommand" id="com.xu.learn.menus.sampleCommand"></command></menu></menuContribution></extension></plugin>

在这里插入图片描述

3 点击事件

XML字段含义
extension.handlercommandId处理id
menu.commandcommandId处理id
menu.commandclass为处理类的路径
package com.xu.learn.handlers;import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.MessageDialog;public class SampleHandler extends AbstractHandler {@Overridepublic Object execute(ExecutionEvent event) throws ExecutionException {IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);MessageDialog.openInformation(window.getShell(),"Learn","点击菜单弹框");return null;}
}
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin><extension point="org.eclipse.ui.menus"><menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"><menu id="com.xu.learn.menus.sampleMenu" label="一级菜单"><command commandId="com.xu.learn.commands.sampleCommand" id="com.xu.learn.menus.sampleCommand"></command></menu></menuContribution></extension><extension point="org.eclipse.ui.handlers"><handler class="com.xu.learn.handlers.SampleHandler" commandId="com.xu.learn.commands.sampleCommand"></handler></extension></plugin>

在这里插入图片描述

4 二级菜单 (静态)

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin><!-- 添加顶部菜单 --><extension point="org.eclipse.ui.menus"><menuContribution locationURI="menu:org.eclipse.ui.main.menu"><!-- 添加顶部 一级菜单 --><menu id="com.xu.test.menus.menu1" label="菜单1"><!-- 一级菜单 下增加 二级菜单1 --><command commandId="com.xu.test.commands.submenu1Command" icon="icons/sample.png" id="com.xu.test.menus.submenu1" label="二级菜单1"></command><!-- 一级菜单 下增加 二级菜单2 --><command commandId="com.xu.test.commands.submenu2Command" icon="icons/sample.png" id="com.xu.test.menus.submenu2" label="二级菜单2"></command><!-- 一级菜单 下增加 二级菜单3 --><command commandId="com.xu.test.commands.submenu3Command" icon="icons/sample.png" id="com.xu.test.menus.submenu3" label="二级菜单3"></command><!-- 一级菜单 下增加 二级菜单3 --><menu id="com.xu.test.menus.submenu4" label="二级菜单4"><!-- 二级级菜单 下增加 三级菜单1 --><command commandId="com.xu.test.commands.submenu4_1Command" id="com.xu.test.menus.submenu4_1" label="三级菜单1"></command></menu></menu></menuContribution></extension><!-- 菜单点击命令 --><extension point="org.eclipse.ui.commands"><!-- 二级菜单1 命令 --><command defaultHandler="com.xu.handlers.HelloHandler" id="com.xu.test.commands.submenu1Command" name="二级菜单1命令"></command><!-- 二级菜单2 命令 --><command defaultHandler="com.xu.handlers.SampleHandler" id="com.xu.test.commands.submenu2Command" name="二级菜单2命令"></command><!-- 二级菜单3 命令 --><command defaultHandler="com.xu.handlers.HelloHandler" id="com.xu.test.commands.submen3Command" name="二级菜单3命令"></command><!-- 三级菜单1 命令 --><command defaultHandler="com.xu.handlers.HelloHandler" id="com.xu.test.commands.submenu4_1Command" name="三级菜单1命令"></command></extension></plugin>

在这里插入图片描述

5 二级菜单 (动态)

方式场景实现
继承 CompoundContributionItem + dynamic动态生成菜单项推荐
反复修改 plugin.xml麻烦、不灵活plugin.xml 是静态配置
package com.xu.dynamic;import java.util.ArrayList;
import java.util.List;import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.actions.CompoundContributionItem;public class DynamicSubMenu extends CompoundContributionItem {@Overrideprotected IContributionItem[] getContributionItems() {List<IContributionItem> items = new ArrayList<>();// 示例:根据某些条件动态生成7个子项for (int i = 1; i <= 7; i++) {final int index = i;items.add(new ContributionItem() {@Overridepublic void fill(Menu menu, int indexInMenu) {MenuItem menuItem = new MenuItem(menu, org.eclipse.swt.SWT.PUSH, indexInMenu);menuItem.setText("动态菜单项 " + index);menuItem.addListener(org.eclipse.swt.SWT.Selection, e -> {System.out.println("你点击了:动态菜单项 " + index);// 你可以在这里调用命令或其他逻辑});}});}return items.toArray(new IContributionItem[0]);}
}
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin><!-- 添加顶部菜单 --><extension point="org.eclipse.ui.menus"><menuContribution locationURI="menu:org.eclipse.ui.main.menu"><!-- 添加顶部 一级菜单 --><menu id="com.xu.test.menus.menu1" label="菜单1"><!-- 一级菜单 下增加 二级菜单1 --><command commandId="com.xu.test.commands.submenu1Command" icon="icons/sample.png" id="com.xu.test.menus.submenu1" label="二级菜单1"></command><!-- 一级菜单 下增加 二级菜单2 --><command commandId="com.xu.test.commands.submenu2Command" icon="icons/sample.png" id="com.xu.test.menus.submenu2" label="二级菜单2"></command><!-- 一级菜单 下增加 二级菜单3 --><command commandId="com.xu.test.commands.submenu3Command" icon="icons/sample.png" id="com.xu.test.menus.submenu3" label="二级菜单3"></command><!-- 一级菜单 下增加 二级菜单3 --><menu id="com.xu.test.menus.submenu4" label="二级菜单4"><!-- 动态生成三级菜单 --><dynamic class="com.xu.dynamic.DynamicSubMenu" id="com.xu.test.menus.dynamicSubmenu"/></menu></menu></menuContribution></extension><!-- 菜单点击命令 --><extension point="org.eclipse.ui.commands"><!-- 二级菜单1 命令 --><command defaultHandler="com.xu.view.handlers.HelloHandler" id="com.xu.test.commands.submenu1Command" name="二级菜单1命令"></command><!-- 二级菜单2 命令 --><command defaultHandler="com.xu.view.handlers.SampleHandler" id="com.xu.test.commands.submenu2Command" name="二级菜单2命令"></command><!-- 二级菜单3 命令 --><command defaultHandler="com.xu.view.handlers.HelloHandler" id="com.xu.test.commands.submen3Command" name="二级菜单3命令"></command><!-- 三级菜单1 命令 --><command defaultHandler="com.xu.view.handlers.HelloHandler" id="com.xu.test.commands.submenu4_1Command" name="三级菜单1命令"></command></extension></plugin>

在这里插入图片描述

相关文章:

  • 2025.04.26-饿了么春招笔试题-第一题
  • c++ package_task
  • 【Hive入门】Hive分桶表深度解析:从哈希分桶到Join优化的完整指南
  • Ubuntu编译opencv源码
  • SpringBoot实现的后端开发
  • 【计算机视觉】CV实战项目 -深度解析PaddleSegSharp:基于PaddleSeg的.NET图像分割解决方案
  • 数值数据处理的黄金法则:构建高质量机器学习模型的基石‌
  • per-task affinity 是什么?
  • 思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)
  • 配置文件的四级分类
  • 在Mybatis中为什么要同时指定扫描mapper接口和 mapper.xml 文件,理论单独扫描 xml 文件就可以啊
  • 数字IC后端实现教程之InnovusICC2添加Tie High/Low cell脚本
  • 4月25日日记(补)
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-前端美化滚动条问题
  • 桌面端开发技术栈选型:开启高效开发之旅
  • Eigen库编译
  • BT152-ASEMI机器人率器件专用BT152
  • Graphpad Prism10.1.2 中文版科学绘图软件 安装包下载
  • c#简易超市充值卡程序充值消费查余额
  • autodl(linux)环境下载git-lfs等工具及使用
  • 庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会隆重举行,习近平发表重要讲话
  • 加拿大今日大选:房价、印度移民和特朗普,年轻人在焦虑什么?
  • 体坛联播|巴萨“三杀”皇马夺国王杯,陈妤颉破亚洲少年纪录
  • 学大教育:去年净利润1.797亿元,学习中心增加约60所
  • 特朗普将举行集会庆祝重返白宫执政百日,被指时机不当
  • 又一名90后干部被查,已有多人倒在乡镇领导岗位上