2012-03-05 48 views
0

例如,我有一個TreeGrid,並且我向TreeGrid添加了一個ContextMenu。現在我只想在用戶右鍵單擊葉節點時繪製ContextMenu。我的想法是,如果用鼠標右鍵單擊的節點是葉節點,以檢測當ContextMenu將要被抽取,並檢查:如果節點在SmartGWT中,什麼事件告訴你是否正在繪製東西?

  • 如果該節點是葉,繪製ContextMenu
  • 不是一片樹葉,取消繪製

但是什麼事件處理組件的繪製?

UPDATE:

showContextMenuHandler是行不通的。其實這是一個SmartGWT錯誤,因爲如果我說contextMenu.show(),我實際上得到2個上下文菜單:從SmartGWT(我做的一個)和第二個瀏覽器其中包含元素,如(下一頁,上一頁,選擇全部,頁面源,..)。 LeafContextClickHandler,...

這就是爲什麼我想爲ContextMenu本身添加一個繪圖處理程序,以防止它在特殊情況下繪製。

這裏是一個圖像解釋錯誤:

enter image description here

回答

0

您的ShowContextMenuHandler問題不是一個錯誤,而是SmartGWT的一個「特性」。無論如何,如果你不想顯示瀏覽器的菜單,你所要做的就是停止事件傳播到瀏覽器。這可以用下面的代碼段可以輕鬆實現:

addShowContextMenuHandler(new ShowContextMenuHandler() { 

     @Override 
     public void onShowContextMenu(ShowContextMenuEvent event) { 
      //Do not propagate to the browser's menu! 
      event.cancel(); 
      //Continue with your code .... 
     } 
    } 
+0

照片我發現是由您提供的代碼引起的。 'event.cancel'簡單地取消了我的contextMenu,但保留了瀏覽器的contextMenu,如果我不取消,我就簡單地繪製它,我得到了這兩個 – 2012-03-05 23:49:24

+0

我在TreeGrid上測試它,它工作正常。您只需在event.cancel()之後調用Menu.showContextMenu()方法。如果您仍然無法完成工作,請張貼更大的摘要,以便我可以更好地指導您完成此項工作。 – gpapaz 2012-03-06 00:39:28

1

有一對夫婦的這樣做的方法。您必須具有對正在繪製的組件的引用。然後,您可以添加一個DrawHandler,VisibilityChangedHandler,或者在示例中添加一個ShowContextMenuHandler。

在你的例子中,我認爲實現上述機制的更好方法是在TreeGrid上使用LeafClickHandlers和FolderClickHandlers。

+0

看到我更新PLZ – 2012-03-05 15:00:40

相關問題