Я сделал это для виджета 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
должен быть виджетом.Поэтому вам нужно получить элемент в HTMLTable (FlexTable расширяет HTMLTable, который является обычным элементом таблицы HTML) и обернуть его как виджет.Я не уверен, как это сделать, но это было бы возможно.
Еще одна вещь, вам нужно предотвратить появление в браузере собственного контекстного меню.Я добавил это в html-файл в теге body
:
<body oncontextmenu="return false" >