Вам понадобится расширить FlexTable для обработки событий мыши;правая кнопка мыши не вызывает ClickEvent
.Для краткости я просто реализую mouseDown:
public class FlexTableWithMouseEvents
extends FlexTable implements HasMouseDownHandlers {
public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
return addDomHandler(handler, MouseDownEvent.getType());
}
// This useful method is taken from HTMLTable. Only the signature needs
// to be changed, unfortunately that means copying the whole method.
public Cell getCellForEvent(MouseEvent event) {
Element td = getEventTargetCell(Event.as(event.getNativeEvent()));
if (td == null) {
return null;
}
Element tr = DOM.getParent(td);
Element body = DOM.getParent(tr);
int row = DOM.getChildIndex(body, tr);
int column = DOM.getChildIndex(tr, td);
return new Cell(row, column);
}
}
, а затем:
flexTable.addMouseDownHandler(new MouseDownHandler() {
public void onClick(MouseDownEvent event) {
Cell cell = flexTable.getCellForEvent(event);
int button = event.getNativeEvent().getButton();
if (button == NativeEvent.BUTTON_LEFT) {
doLeftClick(cell);
}
if (button == NativeEvent.BUTTON_RIGHT) {
event.preventDefault();
doRightClick(cell);
}
}
}