| 位置 |
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.menuContribution |
locationURI |
菜单栏位置 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.handler |
commandId |
处理id |
| menu.command |
commandId |
处理id |
| menu.command |
class |
为处理类的路径 |
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 {
@Override
public 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">
<command commandId="com.xu.test.commands.submenu1Command" icon="icons/sample.png" id="com.xu.test.menus.submenu1" label="二级菜单1">
</command>
<command commandId="com.xu.test.commands.submenu2Command" icon="icons/sample.png" id="com.xu.test.menus.submenu2" label="二级菜单2">
</command>
<command commandId="com.xu.test.commands.submenu3Command" icon="icons/sample.png" id="com.xu.test.menus.submenu3" label="二级菜单3">
</command>
<menu id="com.xu.test.menus.submenu4" label="二级菜单4">
<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">
<command defaultHandler="com.xu.handlers.HelloHandler" id="com.xu.test.commands.submenu1Command" name="二级菜单1命令">
</command>
<command defaultHandler="com.xu.handlers.SampleHandler" id="com.xu.test.commands.submenu2Command" name="二级菜单2命令">
</command>
<command defaultHandler="com.xu.handlers.HelloHandler" id="com.xu.test.commands.submen3Command" name="二级菜单3命令">
</command>
<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 {
@Override
protected IContributionItem[] getContributionItems() {
List<IContributionItem> items = new ArrayList<>();
for (int i = 1; i <= 7; i++) {
final int index = i;
items.add(new ContributionItem() {
@Override
public 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">
<command commandId="com.xu.test.commands.submenu1Command" icon="icons/sample.png" id="com.xu.test.menus.submenu1" label="二级菜单1">
</command>
<command commandId="com.xu.test.commands.submenu2Command" icon="icons/sample.png" id="com.xu.test.menus.submenu2" label="二级菜单2">
</command>
<command commandId="com.xu.test.commands.submenu3Command" icon="icons/sample.png" id="com.xu.test.menus.submenu3" label="二级菜单3">
</command>
<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">
<command defaultHandler="com.xu.view.handlers.HelloHandler" id="com.xu.test.commands.submenu1Command" name="二级菜单1命令">
</command>
<command defaultHandler="com.xu.view.handlers.SampleHandler" id="com.xu.test.commands.submenu2Command" name="二级菜单2命令">
</command>
<command defaultHandler="com.xu.view.handlers.HelloHandler" id="com.xu.test.commands.submen3Command" name="二级菜单3命令">
</command>
<command defaultHandler="com.xu.view.handlers.HelloHandler" id="com.xu.test.commands.submenu4_1Command" name="三级菜单1命令">
</command>
</extension>
</plugin>
