2009-09-16 3 views
8

Я создаю веб-приложение AJAX с GWT, и я хочу использовать щелчок правой кнопкой мыши для разных вещей, как в настольном приложении. Тем не менее, щелчок правой кнопкой мыши создает стандартное контекстное меню в Интернете, и void onClick (событие ClickEvent) никогда не вызывается. Кто-нибудь понял, как заставить это работать? благодаря!RIght-Click в GWT?

+0

если это любая помощь, не мешая меню правой кнопки мыши в браузере по умолчанию, вы можете поймать правую кнопку мыши, используя MouseDownHandler вместо ClickHandler. – pistolPanties

ответ

4

Оказалось, что это может быть сделано путем расширения DeckPanel. Вот отличная дискуссия, а также хорошая демонстрация, доказывающая, что она работает.

http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/

+0

- это эффективные и сложные программные приложения с большим количеством объектов, отображаемых на экране, поскольку вы не используете основной механизм событий внутри gwt. –

2

Хотя есть способы сделать это, я считаю, что команда GWT были дебаты по этому поводу и решили, что позволяет щелкнуть правой кнопкой мыши в веб-приложение было плохо и так сделал экономного решение не поддерживать его. Аргумент состоял в том, что правый щелчок должен продолжать работать, как ожидалось (вызвать контекстное меню контекстного меню хоста браузера), и переопределение этого было нарушением ожидаемого поведения, и это было бы плохой практикой. Хотя у меня были случаи, когда контекстное меню правой кнопки мыши было полезным, я обычно соглашаюсь с решением команды GWT.

+5

Я не мог больше не согласиться. Я предполагаю, что большинство разработчиков GWT используют GWT в попытке улучшить эмуляцию рабочего стола. И это включает контекстные (правые) клики. Есть много корпоративных приложений, где имеет смысл использовать правые клики. –

+0

Я знаю, что вы имеете в виду, я очень разочаровался в том, что сначала щелкнул правой кнопкой мыши, но после прочтения аргумента команды GWT я медленно подошел. –

+0

@ Daniel Vaughan: Интересный момент. Я бы проголосовал за это, если бы вы добавили ссылку на обсуждаемую вами дискуссию GWT. –

7

easy peasy, добавьте слушателя в контекстменюандлер, который отобразит виджет, основанный на том, где пользователь щелкает правой кнопкой мыши. https://confluence.clazzes.org/pages/viewpage.action?pageId=425996

class MyWidget extends Composite implements ContextMenuHandler { 

    // just an example, use a meaningful Widget here... 
    private Widget base; 

    private PopupPanel contextMenu; 


    public MyWidget() { 
    // initialize base widget, etc... 

    this.contextMenu = new PopupPanel(true); 
    this.contextMenu.add(new HTML("My Context menu!")); 
    this.contextMenu.hide(); 

    initWidget(this.base); 

    // of course it would be better if base would implement HasContextMenuHandlers, but the effect is the same 
    addDomHandler(this, ContextMenuEvent.getType()); 
    } 


    public void onContextMenu(ContextMenuEvent event) { 
    // stop the browser from opening the context menu 
    event.preventDefault(); 
    event.stopPropagation(); 


    this.contextMenu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY()); 
    this.contextMenu.show(); 
    } 

} 

наконец вы хотите, чтобы отключить меню браузеров для полной загруженности этого типа контекстного меню. Это должно работать во всех браузерах, кроме оперы. но если честно, кто использует эти дни Neways^_______^

<body oncontextmenu="return false;"> 
+0

Вы получаете upvote для . Эта часть меня заводила! – Jamie

+0

Это волшебство! Вы не представляете, сколько лет мне понадобилось, чтобы понять, что кто-то вернулся, пока не появились фантастические рамки JS! –

Смежные вопросы