现在的位置: 首页 > 综合 > 正文

Eclipse popupMene高级教程:使用Visibility定制弹出菜单

2013年05月25日 ⁄ 综合 ⁄ 共 6989字 ⁄ 字号 评论关闭
文章转载自:http://solonote.javaeye.com/blog/150906   作者:solonote

这几天一直在研究popupMenu的Action,想要达到的目是选中不同的东西弹出不同的菜单。网上有很多介绍的文章,不过很多文章都是一些翻译过来并且作者没有自己实践过的东西,浪费了我很多时间,最后自己通过摸索,终于找出了这个问题的解决办法。

1.文章类型:
这是一篇解决问题的教程,不讨论技术的背景知识,比如运用到何种设计模式,以及实现背后的原理等问题。

2.此文对您的帮助:
看完此文后您将能够创建一个由选择内容指定弹出项的动态菜单。

setp1.创建一个rcp工程,模板使用有一个view的
step2.创建popupMenu
step2_1.新建类Action1:

Java代码
   1package solonote.example.popupmenu;  
   
2.   
   
3import org.eclipse.jface.action.IAction;  
   
4import org.eclipse.jface.viewers.ISelection;  
   
5import org.eclipse.ui.IObjectActionDelegate;  
   
6import org.eclipse.ui.IWorkbenchPart;  
   
7.   
   
8public class Action1 implements IObjectActionDelegate {  
   
9.   
  
10.     @Override  
  
11.     public void setActivePart(IAction action, IWorkbenchPart targetPart) {  
  
12.         // TODO Auto-generated method stub  
  13.   
  
14.     }
  
  
15.   
  
16.     @Override  
  
17.     public void run(IAction action) {  
  
18.         // TODO Auto-generated method stub  
  19.   
  
20.     }
  
  
21.   
  
22.     @Override  
  
23.     public void selectionChanged(IAction action, ISelection selection) {  
  
24.         // TODO Auto-generated method stub  
  25.   
  
26.     }
  
  
27.   
  
28. }
  

step2_2.添加扩展点:

   1. <?xml version="1.0" encoding="UTF-8"?>  
   2. 
<?eclipse version="3.2"?>  
   3. 
<plugin>  
   4.   
   5.    
<extension  
   
6.          id="application"  
   7.          point
="org.eclipse.core.runtime.applications">  
   8.       
<application>  
   9.          
<run  
  
10.                class="solonote.example.popupmenu.Application">  
  11.          
</run>  
  12.       
</application>  
  13.    
</extension>  
  14.    
<extension  
  
15.          point="org.eclipse.ui.perspectives">  
  16.       
<perspective  
  
17.             name="Perspective"  
  18.             class
="solonote.example.popupmenu.Perspective"  
  19.             id
="solonote.example.popupMenu.perspective">  
  20.       
</perspective>  
  21.    
</extension>  
  22.    
<extension  
  
23.          point="org.eclipse.ui.views">  
  24.       
<view  
  
25.             name="View"  
  26.             class
="solonote.example.popupmenu.View"  
  27.             id
="solonote.example.popupMenu.view">  
  28.       
</view>  
  29.    
</extension>  
  30.    
<!-- 弹出菜单的定义 -->  
  31.    
<extension  
  
32.          point="org.eclipse.ui.popupMenus">  
  33.       
<objectContribution  
  
34.             id="objectContribution"  
  35.             objectClass
="java.lang.Object">  
  36.          
<action  
  
37.                class="solonote.example.popupmenu.Action1"  
  38.                id
="solonote.example.popupMenu.action1"  
  39.                label
="label">  
  40.          
</action>  
  41.       
</objectContribution>  
  42.    
</extension>  
  43.   
  44. 
</plugin> 

step2_3设置弹出菜单的弹出位置
修改View类

Java代码
   1package solonote.example.popupmenu;  
   
2.   
   
3import org.eclipse.jface.action.MenuManager;  
   
4import org.eclipse.jface.viewers.IStructuredContentProvider;  
   
5import org.eclipse.jface.viewers.ITableLabelProvider;  
   
6import org.eclipse.jface.viewers.LabelProvider;  
   
7import org.eclipse.jface.viewers.TableViewer;  
   
8import org.eclipse.jface.viewers.Viewer;  
   
9import org.eclipse.swt.SWT;  
  
10import org.eclipse.swt.graphics.Image;  
  
11import org.eclipse.swt.widgets.Composite;  
  
12import org.eclipse.swt.widgets.Menu;  
  
13import org.eclipse.ui.ISharedImages;  
  
14import org.eclipse.ui.PlatformUI;  
  
15import org.eclipse.ui.part.ViewPart;  
  
16.   
  
17public class View extends ViewPart {  
  
18.     public static final String ID = "solonote.example.popupMenu.view";  
  
19.   
  
20.     private TableViewer viewer;  
  
21.   
  
22.     /** 
  23.      * The content provider class is responsible for providing objects to the 
  24.      * view. It can wrap existing objects in adapters or simply return objects 
  25.      * as-is. These objects may be sensitive to the current input of the view, 
  26.      * or ignore it and always show the same content (like Task List, for 
  27.      * example). 
  28.      
*/
  
  
29.     class ViewContentProvider implements IStructuredContentProvider {  
  
30.         public void inputChanged(Viewer v, Object oldInput, Object newInput) {  
  
31.         }
  
  
32.   
  
33.         public void dispose() {  
  
34.         }
  
  
35.   
  
36.         public Object[] getElements(Object parent) {  
  
37.             return new SimpleDTO[] new SimpleDTO("One"), new SimpleDTO("Two"), 
                                                                       new SimpleDTO("Three") }
;  
  
38.               
  
39.         }
  
  
40.     }
  
  
41.   
  
42.     class ViewLabelProvider extends LabelProvider implements  
  
43.             ITableLabelProvider {  
  
44.         public String getColumnText(Object obj, int index) {  
  
45.             SimpleDTO dto = (SimpleDTO) obj;  
  
46.             return dto.getName();  
  
47.         }
  
  
48.   
  
49.         public Image getColumnImage(Object obj, int index) {  
  
50.             return getImage(obj);  
  
51.         }
  
  
52.   
  
53.         public Image getImage(Object obj) {  
  
54.             return PlatformUI.getWorkbench().getSharedImages().getImage(  
  
55.                     ISharedImages.IMG_OBJ_ELEMENT);  
  
56.         }
  
  
57.     }
  
  
58.   
  
59.     /** 
  60.      * This is a callback that will allow us to create the viewer and initialize 
  61.      * it. 
  62.      
*/
  
  
63.     public void createPartControl(Composite parent) {  
  
64.         viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL  
  
65.                 | SWT.V_SCROLL);  
  
66.         viewer.setContentProvider(new ViewContentProvider());  
  
67.         viewer.setLabelProvider(new ViewLabelProvider());  
  
68.         viewer.setInput(getViewSite());  
  
69.           
  
70.         //初始化弹出菜单  
  71.         MenuManager popupMenuManager = new MenuManager("#PopupMenu");  
  
72.         popupMenuManager.setRemoveAllWhenShown(true);  
  
73.         Menu popupMenu = popupMenuManager.createContextMenu(viewer.getTable());  
  
74.         viewer.getTable().setMenu(popupMenu);  
  
75.         //设置选择提供者和弹出菜单  

抱歉!评论已关闭.