Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > ActionSet/PopupMenu
【标  题】:ActionSet/PopupMenu
【关键字】:ActionSet/PopupMenu
【来  源】:http://blog.csdn.net/bradwoo8621/archive/2007/04/19/1571445.aspx

ActionSet/PopupMenu

Your Ad Here  今天搞Eclipse的ActionSet, 搞得我晕头转向....
至今不能明白的问题是, 我在ActionSet里面声明的Action居然在程序中无法拿到, 郁闷无比.
由于我的需求是Windows的菜单中的某些菜单会在NavigatorView中被Popup重用, 因此在写View的代码的时候需要用代码找到这些Action, 但是十分遗憾, 最后我也没有成功.

于是找到替代的方法, 不过很麻烦.

有个插入点是org.eclipse.ui.popupMenus, 这个插入点可以插入到View, Editor中去, 或者还有一种用法就是指定某种Object的Popup, 但是这个我还没有用到. 据说是比如选择IProject(我用JDT做例子来讲), 可以弹出配置的菜单. 选择*.xml, 又可以弹出另外的配置菜单. 诸如此类.

还是说说插入到View/Editor的弹出菜单吧. 先前我一直认为适合Perspective的ActionSet是重用的, 但是根据今天的研究发现可能不是这样的. 举个例子, 大家都可以看到File菜单里面的Refresh菜单和ResourceNavigator里面的Refresh菜单, 仔细看有点不一样的, 就是File菜单里面的Refresh没有图标! 而如果是一个Action的话, 应该是一致的. 同样的情况可以在Rename和Move中发现, Accelator和Mnomenic都不一样, 如果是同一个Action, 这种情况肯定是不可能的.

说了这么多, 还是写写插入点的使用吧.
在org.eclipse.ui.popupMenus中添加一个View*****, 后面的单词忘了....E文不好. id不说了, 唯一标识. targetID是你要将弹出菜单插入到的View或者editor的id. 然后在这个东西下面加menu/action, 另外有个visibility的东西, 属性挺多, 可以看看eclipse的帮助. 主要就是说这个菜单什么时候出现或者不出现之类的事情. 加menu/aciton的方式和actionSet基本一致. 不同之处在于没有toolbarpath, 这个很自然, 弹出哪里还有工具栏? 另外menubarpath也有一些小区别. actionset中menu没有menupath就是顶级菜单. 而这里没有就是第一个popup了. 如果你要在popup上显示separator, 那么设置path不同就行了, 而不同于actionSet中需要添加separator. 因为windows menubar一般不用separator. 子菜单的写法和actionSet完全一致, 不说了.

另外要注意的就是在View的代码里面要做一些相应的处理, 如下:
public void createPartControl(Composite parent) {
    MenuManager manager 
= new MenuManager("#Popup"); //popup随便什么字符串, 不知道有没有什么关系.
    Menu menu = manager.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    getSite().registerContextMenu(manager, viewer);
}
这些代码非常重要, 不写你的popup出不来....

附一段XML
   <extension
         
point="org.eclipse.ui.popupMenus">
      
<viewerContribution
            
id="rcp.viewerContribution1"
            targetID
="rcp.viewerContribution1">
         
<menu
               
id="rcp.menu1"
               label
="rcp.menu1"
               path
="abc">
            
<separator name="rcp.separator1"/>
         
</menu>
         
<action
               
class="rcp.Action1"
               id
="rcp.action1"
               label
="rcp.action1"
               menubarPath
="rcp.menu1/rcp.separator1"/>
         
<action
               
class="rcp.Action2"
               id
="rcp.action2"
               label
="rcp.action2"
               menubarPath
="def"/>
      
</viewerContribution>
   
</extension>

结构就是rcp.menu1下有个子菜单rcp.action1
rcp.action2和rcp.menu1在同一级别, 中间有个Separator.
js代码触发事件 函数列表:【上一篇】
OpenCms 数据库关系图与类结构图:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • ASE for linux 12.5.x backup error ...
  • php+mysql的学习感受
  • 让GooGLe和百度记住我前进的脚步
  • Java套接字编程(1)
  • 新书预告:《数据库安全-最后的防线》
  • PCMCIA无线网卡 WPC11
  • Linux NTP服务器搭建
  • Mysql 5.0.22 Cluster for RedHat AS4-U2
  • 新增 FreeBSD 账号
  • 如何关联备份服务器
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.