`
hlbng
  • 浏览: 177458 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

往Eclipse RCP视图中添加右键弹出菜单(一)

    博客分类:
  • RCP
阅读更多

往eclipse的默认NavigationView中,添加右键菜单项是非常容易的,甚至不需要自己写代码,只要在plugin.xml中添加扩展项便可以了。
但是这远远达不到我们的要求。如果要我们在自己的rcp程序的View中添加右键弹出菜单就不是很容易了。现在我介绍一下如何在一个树视图中针对不同的TreeObject添加不同的右键弹出菜单的方法。
如果不清楚如何构建一个树,请参考
http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm, 这里有很多关于eclipse Tree的实例。简单将来,Eclipse中创建树有两种,一种是使用SWT提供的树,依照一定的格式给其提供数据,我自己只用这种方法创建一些简单的、静态的树。另一种方法,针对于RCP程序,可以使用JFace提供的TreeViewer类,非常灵活并且易于扩展。使用TreeViewer需要实现ITreeContentProvider接口和ITreeLableProvider接口。由于我的时间有限,不能向大家提供具体的实现方法,请原谅。可以参考以下文章:http://eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm
在大体了解了如何构造一个树之后,我们下面就来介绍右键弹出菜单context menu的实现方法。
一个TreeViewer 必须继承ViewPart方法,并且重写其中的createPartControl(Composite parent)类。


   public void createPartControl(Composite parent) {

   /* Set the imput data and image model of the tree viewer,
    * and layout the viewer on the left part of the composite.
    */
    viewer = new TreeViewer(parent);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setInput(createDummyModel());
10
11   createActions();
12   createMenus();
13   createContextMenu(parent);
14
15   //handles the actions related with treeviewer.
16   makeActions(parent);
17 }
其中,第7到9行为设置TreeViewer的内容提供器、图像提供器、以及初始化时的输入数据。第13行为创建右键弹出菜单。

1     private void createContextMenu(Composite parent) {

3         MenuManager mgr = new MenuManager();
4         mgr.setRemoveAllWhenShown(true);
5         mgr.addMenuListener(new IMenuListener() {
6             public void menuAboutToShow(IMenuManager manager) {
7                fillContextMenu(manager);
8             }
9         });
10     Menu menu = mgr.createContextMenu(viewer.getControl());
11     viewer.getControl().setMenu(menu);
12     getSite().registerContextMenu(mgr, viewer);
13   }
第4行代码中,setRemoveAllWhenShown(true)的作用是清空以前显示的菜单项,当触发了menu事件时,重新填充(fillContextMenu),所以如果不把removeAllWhenShow置为true的话,每点一下右键你就会看到菜单项多出一倍来。Menu是swt的控件,而Menumanager是Jface中的控件,不象SWT那样直接同底层打交道。用MenuManager可以创建出一个Menu对象。第十行mgr.createContextMenu(viewer.getControl());这里的viewer即为上面的viewer。第十一行,然后我们将树的setMenu方法将树控件与Menu控件联系在一起就好了。
最重要的是第十二行,这是context menu能不能显示的关键。一个视图中可以有多个context menu, 而每一个context menu都必须注册给workbench。这需要通过调用
org.eclipse.ui.IWorkbenchPartSite.registerContextMenu(MenuManager menuManager, ISelectionProvider selectionProvider)或者(当有多个注册的context menu时)org.eclipse.ui.IWorkbenchPartSite.registerContextMenu(String menuId, MenuManager menuManager, ISelectionProvider selectionProvider) 增加的参数menuId用于区分不同的context menu。
接下来,我们有两种方法来创建右键弹出菜单项。第一种,实现fillContextMenu()方法。典型的实现代码如下:
1     protected void fillContextMenu(IMenuManager manager) {
2  
3         manager.add(openAction);
4         manager.add(removeAction);
5         manager.add(addAction);
6              } 

这些Action都可由自己定义创建。
另外的方法,可以编辑plugin.xml文件。不需要自己写任何代码便可以显示出自己想要的弹出项。

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    RCP自定义透视图切换按钮的右键菜单

    透视图是Eclipse RCP中的一个重要概念,它定义了工作台窗口中各视图和编辑器的布局。默认情况下,Eclipse RCP提供了标准的透视图切换方式,但开发者可以根据需求进行自定义。下面我们将逐步解析这个过程: 1. **...

    通过例子学习EclipseRCP开发

    视图是Eclipse RCP中显示信息的小型窗口,可以动态地显示数据。创建视图涉及定义视图的类,并实现必要的接口方法来显示内容。还可以通过代码将视图添加到特定的透视图中。 #### 使用编辑器、视图交互及模型更新 ...

    Eclipse-4-RCP教程

    #### 十九、视图、弹出菜单和动态菜单 - **视图**:理解视图在Eclipse RCP中的作用。 - **弹出菜单**:了解如何实现弹出式菜单。 - **动态菜单**:学习如何根据条件动态更改菜单项。 #### 二十、工具栏、工具控件...

    plugin2_RCP菜单_teamcenter_

    此外,还可以通过`menuContribution`元素来指定菜单或工具栏的位置,如主菜单、弹出菜单或工具栏。 4. **Teamcenter中的菜单集成**:在Teamcenter的RCP环境中,菜单和工具栏的定制通常涉及到对Teamcenter API的调用...

    eclipse插件开发官方示例

    然后,选择项目右键单击,从弹出菜单中选择"Run As" → "Eclipse Application",这样就可以在Eclipse RCP环境中运行并查看示例的运行效果了。 总结来说,这个Eclipse RCP插件开发官方示例是学习Eclipse RCP应用开发...

    Eclipse-4-RCP教程1

    视图、弹出菜单和动态菜单增加了用户界面的灵活性,可以根据需要显示或隐藏菜单项。 22. **工具有栏、ToolControls 和下拉工具项** 这些组件提供了丰富的用户界面选项,如按钮、复选框、下拉列表等,它们可以...

    Eclipse.Tutorial.Commands.docx

    命令可以插入到主菜单、子菜单或者弹出菜单中。通过在`.menu.xml`文件中添加命令ID,可以将命令显示为菜单项。同时,可以设置命令的可见性和启用状态,这些状态可以通过核心表达式或自定义表达式来动态控制。 3 ...

    如何下载eclipse和如何编写hello world

    在弹出的对话框中,为你的项目输入一个名称,比如"HelloWorld",取消勾选"Create module-info.java file",然后点击"Next" -&gt; "Finish"。 3. 打开项目:在左侧的"Package Explorer"视图中,展开你的项目,找到"src...

    GEF入门案例1

    1. 要运行项目,点击"Run" &gt; "Run Configurations...",在弹出的窗口中,右键点击"Eclipse Application",选择"New",然后输入"gef.test"。 2. 配置Main和Plug-ins,然后点击"Run"启动项目。启动后,你将看到一个...

    GEF 入门教程 中文版

    - 上下文菜单是在用户右键点击某个元素时弹出的菜单。 - 它可以根据用户的操作上下文提供相关的选项。 **知识点2:实现上下文菜单** 1. **定义菜单项**:使用GEF提供的API来定义菜单项及其行为。 2. **绑定菜单项*...

    nodejs调试

    在Eclipse中,选择“File” &gt; “New” &gt; “Other”,在弹出的对话框中找到“Node.js”并选择“Node.js Application”,点击“Next”。在新窗口中,为项目命名,设置项目位置,然后点击“Finish”。这将为你创建一个...

Global site tag (gtag.js) - Google Analytics