2009-09-16 16 views
8

Sto costruendo un'app Web AJAX con GWT e voglio usare il tasto destro del mouse per varie cose, proprio come in un'applicazione desktop. Tuttavia, facendo clic con il tasto destro si produce il menu di scelta rapida standard Web e l'evento onClick (evento ClickEvent) non viene mai chiamato. Qualcuno ha capito come farlo funzionare? Grazie!RIght-Click in GWT?

+0

se si tratta di alcun aiuto senza impedire browser predefinito menu del tasto destro, si può prendere un clic destro utilizzando mouseDownHandler invece di clickHandler. – pistolPanties

risposta

4

Si scopre che è possibile farlo estendendo DeckPanel. Ecco una discussione eccellente, insieme a una bella demo che dimostra che funziona.

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

+0

questo è efficace e risolvera le applicazioni complesse con un sacco di oggetti resi sullo schermo in quanto non si utilizza il motore di eventi principale all'interno di gwt. –

2

Anche se ci sono modi per farlo credo che la squadra GWT ha avuto un dibattito su questo e ha deciso che permette tasto destro del mouse in una web app è stata una brutta cosa, e così ha preso la decisione consapevole di non sostenerlo. L'argomento era che il clic con il tasto destro dovrebbe continuare a funzionare come previsto (fai apparire il menu di scelta rapida del tasto destro del browser host) e ignorare questo comportamento stava rompendo quel comportamento previsto e sarebbe una cattiva pratica. Mentre ho avuto casi in cui un menu di scelta rapida con clic destro sarebbe utile in generale, tendo ad essere d'accordo con la decisione del team GWT.

+5

Non potrei non essere più d'accordo. Direi che la maggior parte degli sviluppatori di GWT utilizza GWT nel tentativo di emulare meglio l'esperienza desktop. E questo include clic contestuali (a destra). Ci sono molte app aziendali dove ha senso usare i clic giusti. –

+0

So cosa intendi, mi sono abbastanza frustrato che all'inizio mancasse il tasto destro, ma dopo aver letto l'argomento della squadra GWT, sono venuto lentamente. –

+0

@Daniel Vaughan: punto interessante. La voterei se aggiungessi un collegamento alla discussione GWT che menzioni. –

7

easy peasy, aggiungi un listener sul gestore di contesto che visualizzerà un widget in base al clic destro dell'utente. 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(); 
    } 

} 

infine si vuole disabilitare il menu del browser per la piena sovraccarico di questo tipo di menu di scelta rapida. Questo dovrebbe funzionare in tutti i browser eccetto l'opera. ma onestamente che usa che in questi giorni Neways^_______ ^

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

Ottieni un upvote per il . Quella parte mi stava facendo impazzire! – Jamie

+0

Questa è la magia! Non hai idea di quanti anni mi ci sono voluti per capirlo prima che esistessero i fantastici quadri JS! –