java - SWT 文本中的上下文菜单的子菜单
问题描述
我想要一个带有简单子菜单的弹出菜单。右键单击SWT 文本( commandText
)。我想要实现的是:
A -> D
E
F
B
C
所以在动作“A”下应该有动作“D,E,F”。“B”和“C”是顶层的动作,就像“A”一样。我的尝试是:
private void addCommandTextContextMenu() {
MenuManager popupMenu = new MenuManager("#PopupMenu");
popupMenu.setRemoveAllWhenShown(true);
popupMenu.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
Action aAction = new Action("A") {};
Action bAction = new Action("B") {};
Action cAction = new Action("C") {};
manager.add(aAction);
manager.add(bAction);
manager.add(cAction);
}
});
MenuManager subMenu = new MenuManager("#SubMenu");
subMenu.setRemoveAllWhenShown(true);
subMenu.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
Action dAction = new Action("D") {};
Action eAction = new Action("E") {};
Action fAction = new Action("F") {};
manager.add(dAction);
manager.add(eAction);
manager.add(fAction);
}
});
popupMenu.add(subMenu);
final Menu menu2 = popupMenu.createContextMenu(commandText);
commandText.setMenu(menu2);
}
我只能看到A、B、C。
我尝试使用 Java 为 Eclipse 插件添加此弹出菜单,只是因为我认为它应该比在 plugin.xml 中使用命令和处理程序定义菜单更容易。
解决方案
只需创建子菜单并将子菜单操作直接添加到子菜单:
public void menuAboutToShow(final IMenuManager manager) {
final Action bAction = new Action("B") {};
final Action cAction = new Action("C") {};
final Action dAction = new Action("D") {};
final Action eAction = new Action("E") {};
final Action fAction = new Action("F") {};
final MenuManager subMenu = new MenuManager("A");
subMenu.add(dAction);
subMenu.add(eAction);
subMenu.add(fAction);
manager.add(subMenu);
manager.add(bAction);
manager.add(cAction);
}
将子菜单管理器添加到顶级管理器。子菜单管理器的名称用于顶级菜单项。
推荐阅读
- php - codeigniter 会话在采取之前存在
- node.js - ReactionCollector 过滤器不适用于其中一种表情符号
- javascript - Angular 6中具有相应组件的子路由
- bash - 如何强制命令在 bash 脚本中执行
- api - 无法通过 400 错误
- ubuntu - 通知 http 服务器错误 (Nginx)
- mysql - 使用查询将 TB 大小的 json 或 csv 文件加载到 mySql 的最快方法?
- node.js - Mongodb和节点在连接集群时出错?
- javascript - 使用 node.js 的无限 OAuth 重定向循环
- c# - C#, ”?” 和“:”运算符