2014-12-19 35 views

回答

1

可以使用MenuItem對象的基礎元素:

final Element element = menuItem.getElement(); 
Event.addNativePreviewHandler(new Event.NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(Event.NativePreviewEvent event) { 
     if (event.getTypeInt() == Event.ONMOUSEDOWN 
       && event.getNativeEvent().getButton() == Event.BUTTON_RIGHT 
       && event.getNativeEvent().getEventTarget().equals(element)) { 
      showSpecialMenu(); 
     } 
    } 
}); 

Event.sinkEvents(element, Event.ONMOUSEDOWN); 

或像這樣(你也可以防止默認的上下文菜單):

final Element element = menuItem.getElement(); 
Event.addNativePreviewHandler(new Event.NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(Event.NativePreviewEvent event) { 
     if (event.getTypeInt() == Event.ONCONTEXTMENU && event.getNativeEvent().getEventTarget().equals(element)) { 
      // prevent default context menu 
      event.getNativeEvent().stopPropagation(); 
      event.getNativeEvent().preventDefault(); 

      // show custom context menu 
      showSpecialMenu(); 
     } 
    } 
}); 

Event.sinkEvents(element, Event.ONCONTEXTMENU); 

你都可以做這樣的:

...... 
Event.sinkEvents(element, Event.ONCONTEXTMENU | Event.ONMOUSEDOWN); 
+0

非常感謝,捕捉事件,但我仍然看到本地上下文菜單,而不是我的。 – user1176505 2014-12-20 11:41:56

+0

奇怪的是第二個不適合我 - 我從來沒有看到一個ONCONTEXTMENU事件拋出。但爲了我的目的有一個上下文菜單,即使沒有抑制本地菜單它是一個很大的幫助,謝謝。 我也有這最終是活動對象,所以我用 element.toString(菜單項中的超鏈接)。包含(event.getNativeEvent()。getEventTarget()。toString()方法) 謝謝再次 – user1176505 2014-12-21 06:05:14

+0

嗯。我其實從來沒有得到這個工作,因爲我有一個超鏈接在MenuItem中,事件來自超鏈接,但元素是MenuItem。 在GWT開發模式,它 element.toString()。含有偉大的工作(event.getNativeEvent()。getEventTarget()。的toString()) 但是一旦編譯失敗,我無法找到任何方式來匹配右鍵單擊它來自哪個menuItem的事件。此外,菜單項getAbsoluteTop()即使在可見時也爲零(請參閱http://stackoverflow.com/questions/27644719/gwt-menuitem-in-a-submenu-has-zero-getabsolutetop-getabsoluteleft) – user1176505 2014-12-25 19:23:57

相關問題