通常,如果不做特殊处理的话,在表头(树头,以下统称表头)的上点击右键和在表体里点击右键,显示的菜单结果一样的。
有时候我希望能显示不一样的菜单,例如在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,映射到表中的具体位置,然后用表头的高度与它的大小关系,来判断当前点击处是否在表头处,如果在表头处,则显示表头菜单,否则显示表体菜单。
这里都假设表头是可见的,如果表头不可见。这篇文章就没意义了。
- 大小: 11.2 KB
分享到:
相关推荐
3种不同的ContextMenu右键菜单演示.,3种不同的ContextMenu右键菜单演示.3种不同的ContextMenu右键菜单演示.
elementui表格上右键单击弹出菜单项,点击菜单调用后续方法
由于项目要求,需要在 Table 组件的行内点右键的时候弹出菜单。在线演示地址及最终效果图如下: 在线演示地址>> 首先新建一个Table组件的实例: <a> { return record.INDEX;}" :dataSource="tableData" /> ... ...
实现JLabel右键进行响应的操作,摆脱按钮响应,大幅度提高界面的美观
//选择右键菜单的一项后,菜单隐藏 pop.document.onclick=function(){ pop.hide(); } //显示菜单 pop.show(event.clientX-1,event.clientY,width,rowCount*25,document.body); return true; } function ...
如今Bootstrap这个前端框架已被许多人接受并应用在不同的项目中,其中“开发高效,设备兼容”的特点表现得非常明显。这篇文章主要介绍了使用contextMenu插件实现Bootstrap table弹出右键菜单,需要的朋友可以参考下
针对父类子类 tabletree4J 很容易生成树形菜单,无限级,有demo 内有demo,及帮助文档api
主要介绍了jQuery动态生成表格及右键菜单功能,结合实例形式分析了jQuery表格的动态操作及鼠标事件响应相关技巧,需要的朋友可以参考下
4、考虑到dhtmlxmenu实在指定的区域构建菜单,所以可以为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 难点和解决方案: 1、怎样获得...
1、在所编辑的页面,需要添加右键菜单的元素,绑定contextmenu事件 ($event)> ...... 2、在页面编写右键菜单内容 上移一层 下移一层 3、在data()中定义需要的变量属
利用QTableView表格视图和QStandardItemModel模型类实现右击菜单删除的事件过滤效果,可参考文章:https://blog.csdn.net/didi_ya/article/details/122608896
很酷的右键弹出菜单,快拿走吧
bootstrap-table-tree.js对bootstrap-table中某些方法进行重写。
TableTree4J 是一个开源的基于javascript的树状菜单和表格控件 使用TableTree4J可以轻易实现带树状折叠效果的表格和树状折叠菜单 目前TableTree4J版本为1.1Re版,支持一下功能 1.多种模式切换,样式更改...
根据数据库表产生树型结构的JSON(Table2JSONTree)
Web dynpro tree table-TreeByKeyTableColumn 如何在页面中加入节点
Tapestry中的Table和Tree的完整教程
实现在表格中显示树形结构,支持动态添加,删除。 花了10个小时终于写出来了。 贴出来分享一下。 包含封装后的成品和封装前源代码。