SWT/JFACE 在Tableviewer中只在表头上右击显示上下文菜单
来源:互联网 发布:螺纹钢的算法 编辑:程序博客网 时间:2024/06/07 07:14
通常,如果不做特殊处理的话,在表头(树头,以下统称表头)的上点击右键和在表体里点击右键,显示的菜单结果一样的。
有时候我希望能显示不一样的菜单,例如在Windows的Explorer上,如果在表头点击菜单,显示就是可显示的列项。
在SWT中,缺省是不支持对表头添加菜单的,不过我们可以自己实现这个功能。
在SWT中有一个MenuDetect事件,可以查看源码,在Widget类的showMenu(int x, int y):
- boolean showMenu (int x, int y) {
- Event event = new Event ();
- event.x = x;
- event.y = y;
- sendEvent (SWT.MenuDetect, event);
- // widget could be disposed at this point
- if (isDisposed ()) return false;
- if (!event.doit) return true;
- Menu menu = getMenu ();
- if (menu != null && !menu.isDisposed ()) {
- if (x != event.x || y != event.y) {
- menu.setLocation (event.x, event.y);
- }
- menu.setVisible (true);
- return true;
- }
- return false;
- }
可以看到,每次菜单显示之前,会先发出一个SWT.MenuDetect事件,之后才是显示具体的Menu。所以如果我们想对表头和表体显示不同的菜单,可以在每次显示菜单前,根据点击位置的不同,设置不同的菜单,最后让它显示出来。
根据以上源码,显然,我们可以增加一个SWT.MenuDetect事件监听,来设置菜单,这个菜单在之后就会被显示出来。
看以下代码:
- final Menu bodyMenu = ...;
- final Menu headerMenu = ... ;
- table.addListener(SWT.MenuDetect, new Listener() {
- public void handleEvent(Event event) {
- Table t = (Table) event.widget;
- Point pt = t.getDisplay().map(null, t, event.x, event.y);
- Rectangle clientArea = t.getClientArea();
- boolean isHeader = ((pt.y - clientArea.y) <= t
- .getHeaderHeight());
- t.setMenu(isHeader ? headerMenu : bodynMenu);
- }
- });
每次,当Menu显示之前,我们把event中的x,y,映射到表中的具体位置,然后用表头的高度与它的大小关系,来判断当前点击处是否在表头处,如果在表头处,则显示表头菜单,否则显示表体菜单。
这里都假设表头是可见的,如果表头不可见。这篇文章就没意义了。
0 0
- SWT/JFACE 在Tableviewer中只在表头上右击显示上下文菜单
- SWT/JFACE 在Tableviewer中只在表头上右击显示上下文菜单
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程一(显示tableViewer)
- Swt/Jface tableViewer入门教程(显示tableViewer) 转 受益匪浅
- Swt/Jface tableviewer总结
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)
- Swt/Jface tableViewer入门教程1
- Swt/Jface tableViewer入门教程2
- Swt/Jface tableviewer入门教程3
- Swt/Jface tableviewer入门教程4
- Swt/Jface tableViewer总结(二)
- Swt/Jface tableViewer总结(三)
- Swt/Jface tableViewer总结(四)
- Swt/Jface tableViewer总结(五)
- 在Eclipse中配置Swt/Jface开发环境
- 博客地址
- 三极管开关电路设计____很具代表性
- 数据结构实验之二叉树的建立与遍历
- coco2dx 3.0 EventDispatcher事件派发
- java图像处理
- SWT/JFACE 在Tableviewer中只在表头上右击显示上下文菜单
- 《走出软件作坊》读书心得1
- Java--三大特性体验
- 使用 Redis 来存储 Apache Tomcat 7 的 Session
- cocos2dx读书笔记之CCLOG打印%百分号
- spark的安装过程记录
- 组包的code
- ios8 iphone5s,6 touchid指纹登录
- Android 智能问答机器人的实现