当前位置: 首页 > 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>

在这里插入图片描述

http://www.xdnf.cn/news/157753.html

相关文章:

  • Java数据结构——Stack
  • Gin框架
  • 【股票系统】使用docker本地构建ai-hedge-fund项目,模拟大师炒股进行分析。人工智能的对冲基金的开源项目
  • 测试用例的设计
  • 股指期货成交量是单边还是双边?
  • 慢查询日志对于分析mysql数据库性能有什么帮助
  • crossOriginLoading使用说明
  • 达芬奇模板 15组现代简洁文字标题动画 Modern Titles v2.0 DR
  • 搭建基于火灾风险预测与防范的消防安全科普小程序
  • 客户案例 | 光热+数智双驱动!恒基能脉的数字化协同与技术创新实践
  • 启动 n8n 步骤指南
  • x86系列CPU寄存器和汇编指令总结
  • 【新技术】微软 Azure Test Impact Analyzer (TIA) 全面解析
  • Python Cookbook-6.10 保留对被绑定方法的引用且支持垃圾回收
  • Spark 极速回顾
  • AIGC在游戏开发中的革命:自动化生成3A级游戏内容
  • 如何使用WebRTC
  • Cisco Packet Tracer使用 搭建网络拓扑
  • 3、LangChain基础:LangChain Tools Agent
  • 【Kafka】Windows环境下生产与消费流程详解(附流程图)
  • proxychains4系统代理for linux(加速国内github下载速度,pip安装)
  • pytorch python常用指令
  • 2025.04.26-美团春招笔试题-第二题
  • 线性代数(一些别的应该关注的点)
  • 立创EDA
  • 25【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(二)
  • 【AI论文】VisuLogic:评估多模态大语言模型中视觉推理的基准
  • MySQL 中 SQL 语句的详细执行过程
  • Windows 安装 Neo4j 教程
  • 【Android】四大组件之Activity