Я пытаюсь захватить щелчок правой кнопкой мыши на виджете, чтобы открыть собственное контекстное меню вместо браузера. Есть несколько ссылок на это, но самая популярная здесь немного устарела, хотя некоторые комментарии содержат более свежие фрагменты кода.
Я собрал кусочки, и у меня это работает в Chrome и FF, но не в IE. В IE он не отображает контекстное меню браузера по умолчанию, но он не отображает мое меню. Я просто вхожу в GWT, поэтому я предполагаю, что я не делаю что-то правильно с правильными обработчиками или событиями. Я также использую модуль gwt-graphics, откуда взялся класс Rectangle, который расширяется, на случай, если это уместно.
Вот мой код:
public class RectangleRightClickable extends Rectangle {
public RectangleRightClickable(int x, int y, int width, int height) {
super(x, y, width, height);
sinkEvents(Event.ONCONTEXTMENU);
}
public void onBrowserEvent(Event event) {
GWT.log("onBrowserEvent");
event.stopPropagation();
event.preventDefault();
GWT.log("event type : " + DOM.eventGetType(event));
switch(DOM.eventGetType(event)) {
case Event.ONCONTEXTMENU:
if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) {
GWT.log("Event.BUTTON_RIGHT", null);
showMenu();
}
break;
default:
GWT.log(event.toString());
break;
}
}
protected void showMenu() {
final RectangleRightClickable parent = this;
final PopupMenu popMenu = new PopupMenu();
popMenu.addMenuItem(new Label("Add thing"));
popMenu.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
public void setPosition(int offsetWidth, int offsetHeight) {
int left = parent.getX() + parent.getWidth();
int top = parent.getY() + parent.getWidth();
popMenu.setPopupPosition(left, top);
}
});
}
}