2009-09-16 39 views
8

我正在用GWT構建一個AJAX Web應用程序,並且我想用右鍵點擊各種東西,就像在桌面應用程序中一樣。但是,右鍵單擊會產生標準的Web上下文菜單,並且void onClick(ClickEvent事件)永遠不會被調用。有沒有人想出瞭如何讓這個工作?謝謝!在GWT中點擊?

+0

如果是不阻止默認瀏覽器右鍵菜單中的任何幫助,您可以通過使用替代函數clickhandler MouseDownHandler趕上右鍵單擊。 – pistolPanties 2011-09-13 14:55:03

回答

4

事實證明,您可以通過擴展DeckPanel來實現。這裏有一個很好的討論,以及一個很好的演示,證明它的工作原理。

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

+0

多數民衆贊成在高效率,並會打嗝複雜的應用程序與大量的屏幕上呈現的對象,因爲你不使用gwt內的核心事件引擎。 – 2012-08-06 15:02:49

2

雖然有這樣做的方法,我相信GWT團隊有一個關於這個辯論,並決定啓用右鍵單擊一個Web應用程序是一件壞事,因此取得了Concious酒店決定不支持它。爭論的是,右鍵點擊應該繼續按預期工作(調出主瀏覽器的右鍵點擊上下文菜單),並覆蓋這個打破了預期的行爲,這將是不好的做法。雖然我有一些右鍵點擊上下文菜單有用的實例,但我傾向於同意GWT團隊的決定。

+5

我無法反駁更多。我猜想大多數GWT開發人員使用GWT來嘗試更好地模擬桌面體驗。這包括上下文(右)點擊。有許多企業應用程序使用右鍵點擊是有意義的。 – 2009-09-17 21:36:54

+0

我知道你的意思,我很沮喪,一開始就錯過了右鍵點擊,但是在閱讀了GWT團隊的論點之後,我慢慢走了進來。 – 2009-09-18 07:54:10

+0

@Daniel Vaughan:有趣的一點。如果您添加了您提到的GWT討論的鏈接,我會對此進行投票。 – 2009-09-18 12:22:03

7

很容易,在contextmenuhandler上添加一個監聽器,它將根據用戶右鍵單擊的位置顯示一個小部件。 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(); 
    } 

} 

最後你將要禁用瀏覽器菜單中這種類型的上下文菜單中的全超載。這應該適用於所有除Opera外的瀏覽器。但老實說,誰使用,這些天NEWAYS^_______^

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

你會對獲得滿意的結果。那部分讓我瘋狂! – Jamie 2015-09-22 17:51:33

+0

這就是魔法!你不知道在花哨的JS框架出現之前,我花了多少年才弄清楚了這一點! – 2015-09-23 18:47:51