2013-03-31 65 views
0

我使用普通的遺留GWT DnD而不是gwt-dnd庫(因爲我不需要DnD小部件,但數據很簡單,所以我想保持簡單)。
我可以用一個Image小部件來實現它。
然後我切換到HTML小部件,但然後拖動不起作用:沒有錯誤沒有什麼,只是拖動不再拖動。
代碼(這個問題是在拖部分,我列出的代碼只有這部分如下):GWT DragStartEvent vs MouseDownEvent

HTML theWidget = new HTML("some string"); // NOK : doesn't drag 
// Image theWidget = new Image ("path/image.png"); // OK : does drag 

theWidget.addDragStartHandler(new DragStartHandler() { 
     public void onDragStart(DragStartEvent event) { 
      event.setData(data, "some data"); 
     } 
}); 

有什麼不對?
看起來好像沒有DragStartEvent,因爲在點擊拖動並移動鼠標放下目標後,瀏覽器會選擇其中的內容(拖動開始拖放目標)。

爲了調查,我添加了一個MouseDownHandler,事實上是一個MouseDownEvent觸發。

所以問題是:如何控制GWT在DragStartEvent和MouseDownEvent之間觸發哪個事件?

+0

什麼瀏覽器?你試過簡單的'preventDefault()''DragStartEvent'嗎? –

+0

@ andrea-boscolo:我在Firefox和Chrome上進行了測試(可能相同:都包含webkit)。我想阻止MouseDown。我沒有得到你的建議:我怎麼能防止MouseDown - 假設然後我會得到DragStart - Tx – gerard

+0

@ andrea-boscolo:我已經添加event.preventDefault();到我的MouseDownHandler。它不會阻止MouseDown觸發。但是沒有更多的從MouseDown到MouseUp的選擇。所以我的結論是,它可以防止在MouseDown之後觸發的默認操作。所以它不能解決我的問題,那就是避免這個MouseDown事件,而是使用DragStart代替。有時(不是很常見),當我在移動鼠標的「MouseDown」時,我得到一個DragStart事件。 – gerard

回答

0

假設你的最終目標是要拖動&使用本地GWT拖&拖放支持(即映射HTML5 API)降HTML小部件,你缺少一些作品,讓事情的工作。你必須:

  • 使得元素draggable(不能看到它在你的代碼):

    theWidget.getElement().setDraggable(Element.DRAGGABLE_TRUE) 
    
  • 添加DragStartHandler的元素,並設置要傳輸的數據(像你一樣):

    theWidget.addDragStartHandler(new DragStartHandler() { 
        public void onDragStart(DragStartEvent event) { 
        event.setData(data, "some data"); 
        } 
    }); 
    
  • 添加DragOverHandler到元素目標,這將是元件落到:

    targetWidget.addDragOverHandler(new DragOverHandler() { 
        public void onDragOver(DragOverEvent event) { 
        // Some kind of effect, if you like. 
        } 
    }); 
    
  • 添加DropHandler同一元素的目標,防止默認的瀏覽器操作,和檢索數據:

    targetWidget.addDropHandler(new DropHandler() { 
        public void onDrop(DropEvent event) { 
        event.PreventDefault(); 
        String data = event.getData("data"); 
        } 
    }); 
    
+0

Tx;其實你的代碼證實了我之前的東西。我只是讓我的問題中的「拖動部分」的代碼。除了:「theWidget.getElement()。setDraggable(Element.DRAGGABLE_TRUE),我沒有放入,因爲它對圖像小部件沒有必要,並且不是用於HTML小部件的,也不是用於根據鼠標移動(很難得到和重現),所以我仍然需要一個解決方案。 – gerard