`
liugang594
  • 浏览: 990769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给Table和Tree的Header加右键菜单

阅读更多

通常,如果不做特殊处理的话,在表头(树头,以下统称表头)的上点击右键和在表体里点击右键,显示的菜单结果一样的。

 

有时候我希望能显示不一样的菜单,例如在Windows的Explorer上,如果在表头点击菜单,显示就是可显示的列项:

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
分享到:
评论

相关推荐

    基于bootstrap的右键菜单例子

    总结来说,这个基于Bootstrap的右键菜单实例展示了如何结合Bootstrap的下拉菜单组件和jQuery来增强表格的功能。通过监听右键点击事件、动态显示和隐藏菜单,我们可以为用户提供更加直观和便捷的交互体验。这种技术...

    elementui表格右键菜单例子.vue

    elementui表格上右键单击弹出菜单项,点击菜单调用后续方法

    jquery 右键菜单功能

    2. **jQuery绑定事件**:接下来,使用jQuery绑定`contextmenu`事件到目标元素,如表格(`&lt;table&gt;`)或其他需要添加右键菜单的元素: ```javascript $('#yourElement').on('contextmenu', function(e) { e....

    matlab GUI右键菜单使用方法

    本教程将详细解释如何在MATLAB 7.0(R2007a)中创建和使用右键菜单。 1. **创建右键菜单** 在MATLAB GUI中,右键菜单通过`uicontextmenu`函数创建。例如,我们可以这样定义一个基本的右键菜单: ```matlab menu ...

    Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)

    在Web开发中,尤其是使用Vue框架构建的单页面应用(SPA)中,常常需要给表格组件添加一些额外的交互功能,比如右键菜单。在本例中,我们将探讨如何在Vue中实现Table组件行内右键菜单的功能,该项目是基于vue + Ant...

    使用contextMenu插件实现Bootstrap table弹出右键菜单

    然而,尽管Bootstrap提供了丰富的功能,但默认情况下,Bootstrap Table并不支持右键菜单功能。在某些特定场景下,例如数据操作或定制化交互,右键菜单可以提供额外的用户交互选项。 为了解决这个问题,我们可以借助...

    tabletree4J 树形菜单,无限级,有demo

    【标签】进一步明确了tabletree4J的主要特点:“树形菜单”和“无限级”。树形菜单是一种常见的用户界面元素,常用于网站导航、文件管理器等,通过节点的展开和折叠,清晰地展现层级关系。无限级则意味着tabletree4J...

    Bootstrap table右键功能实现方法

    然而,原生的Bootstrap Table并不支持右键菜单功能,这使得在某些需要自定义操作的情景下显得有些局限。 在标题和描述中提到的问题是关于如何在Bootstrap Table上实现右键点击功能。为了解决这个问题,我们可以借助...

    Bootstrap鼠标右键下拉菜单特效

    总结起来,"Bootstrap鼠标右键下拉菜单特效"是一个创新的交互设计,它利用Bootstrap的灵活性和JavaScript的动态特性,为用户提供了方便的右键操作方式。通过理解和应用这个特效,开发者可以增强网页的交互性,提升...

    在JTable上添加右键菜单

    实现JLabel右键进行响应的操作,摆脱按钮响应,大幅度提高界面的美观

    js实现 html 鼠标右键 菜单

    //选择右键菜单的一项后,菜单隐藏 pop.document.onclick=function(){ pop.hide(); } //显示菜单 pop.show(event.clientX-1,event.clientY,width,rowCount*25,document.body); return true; } function ...

    jQuery动态生成表格及右键菜单功能示例

    当用户在表格行上右键点击时,菜单的位置通过`event.clientX`和`event.clientY`来确定,然后使用`show`方法显示菜单。具体的菜单项操作需要进一步编写代码来处理,例如,可以绑定`click`事件来响应用户的菜单选择。 ...

    Vue+element-ui添加自定义右键菜单的方法示例

    1、在所编辑的页面,需要添加右键菜单的元素,绑定contextmenu事件 ($event)&gt; ...... 2、在页面编写右键菜单内容 上移一层 下移一层 3、在data()中定义需要的变量属

    TOCControl右键菜单

    在GIS(地理信息系统)开发中,`TOCControl右键菜单`是一个常见的功能,它极大地提高了用户对地图图层的交互性和操作效率。这个功能主要应用于ARCGIS Engine环境中,为用户提供了一种直观的方式来管理地图图层。接...

    JavaScript右键菜单

    ### JavaScript右键菜单知识点解析 #### 一、项目概述 本项目主要介绍了一种通过JavaScript实现的右键菜单功能,该功能旨在为用户提供一个便捷、实用的上下文菜单选项。菜单项包括创建、修改和删除等功能,用户可以...

    JS应用(文本框输入出现自动提示框和右键菜单)

    根据给定的文件信息,我们可以总结出以下关于“JS应用(文本框输入出现自动提示框和右键菜单)”的关键知识点: ### 一、项目概述 本项目主要通过JavaScript实现了一个文本框,在用户输入时能够自动弹出建议列表,...

    TableTree 表格树

    3. 层级菜单:网站或应用程序的导航菜单如果包含多级子项,采用TableTree可使用户更容易导航和理解。 四、封装与源码分析 在提供的压缩包中,包含了一个封装后的成品和封装前的源代码。封装后的成品通常已经进行了...

Global site tag (gtag.js) - Google Analytics