首页 > Java开发 > Rcp 中添加eclipse中的菜单栏

Rcp 中添加eclipse中的菜单栏

自己创建的Eclipse rcp 插件中需要添加像Eclipse中的菜单栏和工具栏,实现该功能可以通过两种方式:1种是通过扩展点,2种是通过在ApplicationActionBarAdvisor 类中编写代码实现。

1、通过扩展点实现:org.eclipse.ui.menus 用于扩展菜单栏,该例子实现eclipse中的window菜单栏中的部分Action

ViewsShortlistContributionItem 源码:

[java]

  1. package com.workflow.menu;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.eclipse.jface.action.IContributionItem;  
  7. import org.eclipse.ui.IWorkbenchWindow;  
  8. import org.eclipse.ui.PlatformUI;  
  9. import org.eclipse.ui.actions.CompoundContributionItem;  
  10. import org.eclipse.ui.actions.ContributionItemFactory;  
  11. /** 
  12.  * 添加show view 的动态菜单项 
  13.  * @author lww 
  14.  * 
  15.  */  
  16. public class ViewsShortlistContributionItem extends CompoundContributionItem {  
  17.   
  18.     @Override  
  19.     protected IContributionItem[] getContributionItems() {  
  20.         IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();  
  21.         IContributionItem item = ContributionItemFactory.VIEWS_SHORTLIST.create(window);//创建viewshortlist  
  22.    
  23.         List<IContributionItem> menuContributionList = new ArrayList<IContributionItem>();  
  24.         menuContributionList.add(item);  
  25.    
  26.         return menuContributionList.toArray(new IContributionItem[0]);  
  27.     }  
  28.   
  29. }  


PerspectiveContributionItem 源码:

[java]

  1. package com.workflow.menu;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.eclipse.jface.action.IContributionItem;  
  7. import org.eclipse.ui.IWorkbenchWindow;  
  8. import org.eclipse.ui.PlatformUI;  
  9. import org.eclipse.ui.actions.CompoundContributionItem;  
  10. import org.eclipse.ui.actions.ContributionItemFactory;  
  11. /** 
  12.  * 创建透视图二级菜单 
  13.  * @author lww 
  14.  * 
  15.  */  
  16. public class PerspectiveContributionItem  extends CompoundContributionItem{  
  17.   
  18.     @Override  
  19.     protected IContributionItem[] getContributionItems() {  
  20.         IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();  
  21.         IContributionItem item = ContributionItemFactory.PERSPECTIVES_SHORTLIST.create(window);  
  22.    
  23.         List<IContributionItem> menuContributionList = new ArrayList<IContributionItem>();  
  24.         menuContributionList.add(item);  
  25.    
  26.         return menuContributionList.toArray(new IContributionItem[0]);  
  27.     }  
  28.   
  29. }  


plugin.xml 中的内容如下:

这样就实现了自己的rcp的菜单中添加了window菜单栏,效果如下:

另一种方式是通过代码实现:

[java]

  1. package mydesigner;  
  2.   
  3. import org.eclipse.jface.action.IContributionItem;  
  4. import org.eclipse.jface.action.ICoolBarManager;  
  5. import org.eclipse.jface.action.IMenuManager;  
  6. import org.eclipse.jface.action.MenuManager;  
  7. import org.eclipse.jface.action.Separator;  
  8. import org.eclipse.jface.action.ToolBarManager;  
  9. import org.eclipse.ui.IWorkbenchActionConstants;  
  10. import org.eclipse.ui.IWorkbenchWindow;  
  11. import org.eclipse.ui.actions.ActionFactory;  
  12. import org.eclipse.ui.actions.ContributionItemFactory;  
  13. import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;  
  14. import org.eclipse.ui.application.ActionBarAdvisor;  
  15. import org.eclipse.ui.application.IActionBarConfigurer;  
  16.   
  17. public class ApplicationActionBarAdvisor extends ActionBarAdvisor {  
  18.   
  19.     private IWorkbenchAction exitAction;//退出按钮  
  20.     private IWorkbenchAction aboutAction;//关于按钮  
  21.     private IWorkbenchAction newAction;//新建按钮  
  22.   
  23.     private IWorkbenchAction saveProjectAction;// 保存工程文件  
  24.     private IWorkbenchAction saveAllAction;// 保存全部  
  25.       
  26.     private IWorkbenchAction newWindowAction;  
  27.       
  28.     private IContributionItem item;  
  29.     //文件菜单栏中的action  
  30.     private IWorkbenchAction importAction;  
  31.     private IWorkbenchAction exportAction;  
  32.       
  33.       
  34.       
  35.     public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {  
  36.         super(configurer);  
  37.     }  
  38.     //创建Action  
  39.     protected void makeActions(IWorkbenchWindow window) {  
  40.         exitAction = ActionFactory.QUIT.create(window);  
  41.         register(exitAction);  
  42.           
  43.         aboutAction = ActionFactory.ABOUT.create(window);  
  44.         register(aboutAction);  
  45.           
  46.         newAction = ActionFactory.NEW.create(window);  
  47.         register(newAction);//新建按钮  
  48.           
  49.         saveProjectAction = ActionFactory.SAVE.create(window);  
  50.         saveAllAction = ActionFactory.SAVE_ALL.create(window);  
  51.         this.getActionBarConfigurer().registerGlobalAction(saveProjectAction); // ctrl+s,保存工程文件。  
  52.         this.getActionBarConfigurer().registerGlobalAction(saveAllAction);// 激活快捷键,ctrl+shift+s,全部保存。  
  53.           
  54.         newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);  
  55.         register(newWindowAction);//注册成全局Action  
  56.           
  57.         item = ContributionItemFactory.VIEWS_SHORTLIST.create(window);//创建viewshortlist  
  58.           
  59.           
  60.         importAction = ActionFactory.IMPORT.create(window);  
  61.         register(importAction);  
  62.           
  63.         exportAction = ActionFactory.EXPORT.create(window);  
  64.         register(exportAction);  
  65.           
  66.     }  
  67.     //菜单栏  
  68.     protected void fillMenuBar(IMenuManager menuBar) {  
  69.         //File菜单栏  
  70.         MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);  
  71.         fileMenu.add(exitAction);  
  72.         fileMenu.add(new Separator());//添加分隔栏  
  73.         fileMenu.add(newAction);  
  74.         fileMenu.add(new Separator());  
  75.         fileMenu.add(importAction);//导入  
  76.         fileMenu.add(exportAction);//导出  
  77.         //Help菜单栏  
  78.         MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);  
  79.         helpMenu.add(aboutAction);  
  80.           
  81.         //Window菜单栏  
  82.         MenuManager windowMenu = new MenuManager("&Window", IWorkbenchActionConstants.M_WINDOW);  
  83.         windowMenu.add(newWindowAction);  
  84.           
  85.         MenuManager showView = new MenuManager("Show View");  
  86.         showView.add(item);//添加ContributionItem  
  87.         windowMenu.add(showView);  
  88.           
  89.         menuBar.add(fileMenu);//把菜单栏添加到工作空间  
  90.         menuBar.add(helpMenu);  
  91.         menuBar.add(windowMenu);  
  92.           
  93.     }  
  94.     //添加到工具栏  
  95.     @Override  
  96.     protected void fillCoolBar(ICoolBarManager coolBar) {  
  97.         ToolBarManager barManager = new ToolBarManager();  
  98.         barManager.add(saveProjectAction);  
  99.         barManager.add(saveAllAction);  
  100.         coolBar.add(barManager);  
  101.     }  
  102. }  

效果如下图:

若想添加其它的Action,可以在类:

org.eclipse.ui.IWorkbenchActionConstants
org.eclipse.ui.actions.ActionFactory
org.eclipse.ui.actions.ContributionItemFactory
org.eclipse.ui.IWorkbenchCommandConstants 查找到对应Action的实现,eclipse实现。

本文固定链接: http://www.devba.com/index.php/archives/5730.html | 开发吧

报歉!评论已关闭.