java - 纯 GWT,事件转换
问题描述
所以,我在 GWT 中有一个“FlexTable”,我需要在右键单击某个单元格时下拉操作列表。在鼠标左键单击以检索我的单元格的“rowIndex”时,我只需使用 ClickEvent 方法“getCellForEvent(event).getRowIndex()”。但是纯 GWT 中没有右键单击处理程序。所以我决定使用需要 ContextMenuEvent 的 ContextMenuHandler。而且,当然,我不能将 ContextMenuEvent 放入 ClickEvent 方法“getCellForEvent”中。这种情况有什么解决办法吗?或者,也许有人知道在“FlexTable”上右键单击下拉列表的更简单方法。
解决方案
我已经为 CellTable 或 DataGrid 小部件完成了此操作,但不是 FlexTable。对于前者,我将一个处理程序对象应用于整个网格小部件,并使用事件来计算事件发生所在的行或单元格。我看不出如何使用 FlexTable 来完成。
使用 FlexTable,一个技巧是为每个单元格创建一个处理程序对象,并在创建时告诉它单元格/行。像这样的东西:
cell.addDomHandler(new ContextMenuHandler() {
@Override
public void onContextMenu(ContextMenuEvent event)
{
// stop the browser from opening the context menu
event.preventDefault();
event.stopPropagation();
NativeEvent nativeClickEvent = event.getNativeEvent();
displayPopupMenuForCell(cell, nativeClickEvent);
}
}, ContextMenuEvent.getType());
在上面,cell
需要是一个Widget。因此,您需要获取 HTMLTable 中的元素(FlexTable 扩展了 HTMLTable,这是一个普通的 HTML 表格元素)并将其包装为小部件。我不知道该怎么做,但这是可能的。
另一件事是,您需要防止浏览器弹出自己的上下文菜单。我将此添加到body
标签中的 html 文件中:
<body oncontextmenu="return false" >
推荐阅读
- android - kotlin 连接摄像头服务失败
- python - 为什么退出代码会给出 ValueError?
- django - Django在测试时没有创建测试数据库
- c - C - 读取文件并将文本放入具有动态内存分配的字符指针
- python - 在 Python 中带有返回值的 C# 回调
- java - Android : 如何跟踪键盘使用情况
- mongodb - 如何在 mongoDB 的两个不同集合中进行查询?(不使用 ORM)
- header - 如何在 Blazor 中订阅 onscroll 事件?
- delphi - Inno Setup 中的 WizardForm.TypesCombo.OnChange(WizardForm.TypesCombo) 是什么意思?
- java - 如何在Java中读取多个具有相同名称的列