2014-07-24 35 views
3

我是GWT新手! 任何人都可以幫助我實現與GWT的上下文菜單? 我看過一些例子:如何使用本地GWT(Java)實現上下文菜單?

MenuBar options = new MenuBar(true); 
     MenuBar gwtPopup = new MenuBar(true); 
     options.addItem("GWT", gwtPopup); 
     MenuItem entryPoint = new MenuItem(new SafeHtmlBuilder().appendEscaped("EntryPoint").toSafeHtml()); 
     entryPoint.setScheduledCommand(new ScheduledCommand() 
     { 
      public void execute() 
      { 
       Window.alert("hello"); 
      } 
     }); 
     final DialogBox menuWrapper = new DialogBox(true); 
     menuWrapper.add(options); 
     gwtPopup.addItem(entryPoint); 
     Button showMenu = new Button("Click me", new ClickHandler() 
     { 
      public void onClick(ClickEvent event) 
      { 
       menuWrapper.showRelativeTo(menuWrapper); 
      } 
     }); 

     RootPanel.get().add(showMenu); 

但它不起作用。謝謝。

+0

你必須要更加具體。什麼不行?你期望它做什麼? –

+0

它會很好,如果你定義哪個位不能在你的代碼中工作,其他的事情是嘗試使用PopupPanel來代替對話 – user902383

+0

只是爲你寫博客:) http://codeinventions.blogspot.in/2014/07/context-菜單 - 或 - 右鍵單擊​​處理程序,in.html –

回答

2

只是寫了一些步驟來完成我的工作代碼。

Context Menu or Right Click Handler in GWT

這是該代碼的重要組成部分。

lable.sinkEvents(Event.ONCONTEXTMENU); 
lable.addHandler(
    new ContextMenuHandler() { 
     @Override 
     public void onContextMenu(ContextMenuEvent event) { 
      event.preventDefault(); 
      event.stopPropagation(); 
      popupMenu.setPopupPosition(
       event.getNativeEvent().getClientX(), 
       event.getNativeEvent().getClientY()); 
      popupMenu.show(); 
     } 
    }, ContextMenuEvent.getType() 
); 
0

event.getNativeEvent()。getClientX()和event.getNativeEvent()。getClientY()滾動頁面後沒有效果很好。

下面是解決方案:

@Override 
public void onContextMenu(ContextMenuEvent event) { 
    NativeEvent nativeEvent = event.getNativeEvent(); 

    // stop the browser from opening the context menu 
    event.preventDefault(); 
    event.stopPropagation(); 

    int x = nativeEvent.getClientX() + getScrollLeft(); 
    int y = nativeEvent.getClientY() + getScrollTop(); 

    this.contextMenu.setPopupPosition(x, y); 
    this.contextMenu.show(); 
} 

public static native int getScrollTop() /*-{ 
return $doc.body.scrollTop; 
}-*/; 

public static native int getScrollLeft() /*-{ 
return $doc.body.scrollLeft; 
}-*/; 
相關問題