阅读:22894回复:0
如何给Viewer的ContextMenu设置二级菜单
效果图在正文下面:
首先给已经定义好的一级菜单的Action实现一个叫做IMenuCreator的接口 我这里已经有了一级菜单对应的Action,下文会贴出此Action全部代码,这里实现接口定义的方法getMenu(Menu),getMenu(Control),createDropDownMenuMgr(); 这里我从第三个方法createDropDownMenuMgr()开始说,这个方法是创建一个菜单管理者,向菜单管理者添加二级菜单的Action createDropDownMenuMgr() private void createDropDownMenuMgr() { if (dropDownMenuMgr == null) { dropDownMenuMgr = new MenuManager(); dropDownMenuMgr.add(new InnerAction("One")); dropDownMenuMgr.add(new InnerAction("Two")); } } getMenu(Control)与一级菜单绑定 public Menu getMenu(Control parent) { createDropDownMenuMgr(); return dropDownMenuMgr.createContextMenu(parent); } getMenu(Control)与一级菜单绑定 public Menu getMenu(Menu parent) { createDropDownMenuMgr(); Menu menu = new Menu(parent); IContributionItem[] items = dropDownMenuMgr.getItems(); for (int i = 0; i < items.length; i++) { IContributionItem item = items; IContributionItem newItem = item; if (item instanceof ActionContributionItem) { newItem = new ActionContributionItem( ((ActionContributionItem) item).getAction()); } newItem.fill(menu, -1); } return menu; } 以下是全部代码 public class RelativeDiagramAction extends Action implements IMenuCreator{ private MenuManager dropDownMenuMgr; public RelativeDiagramAction() { super("相关关系图"); setMenuCreator(this); } @Override public String getId() { // TODO 自动生成的方法存根 return "relative_diagram"; } @Override public void run() { // TODO 自动生成的方法存根 super.run(); } public void dispose() { // TODO 自动生成的方法存根 } public Menu getMenu(Control parent) { createDropDownMenuMgr(); return dropDownMenuMgr.createContextMenu(parent); } public Menu getMenu(Menu parent) { createDropDownMenuMgr(); Menu menu = new Menu(parent); IContributionItem[] items = dropDownMenuMgr.getItems(); for (int i = 0; i < items.length; i++) { IContributionItem item = items; IContributionItem newItem = item; if (item instanceof ActionContributionItem) { newItem = new ActionContributionItem( ((ActionContributionItem) item).getAction()); } newItem.fill(menu, -1); } return menu; } private void createDropDownMenuMgr() { if (dropDownMenuMgr == null) { dropDownMenuMgr = new MenuManager(); dropDownMenuMgr.add(new InnerAction("One")); dropDownMenuMgr.add(new InnerAction("Two")); } } class InnerAction extends Action{ private String text; public InnerAction(String text){ super(text); this.text =text; } public void run(){ System.out.println(text); } } } |
|