GWT DragStartEvent与MouseDownEvent

时间:2013-03-31 10:24:51

标签: gwt drag-and-drop

我使用普通的遗留GWT DnD而不是gwt-dnd库(因为我不需要DnD小部件,而是普通数据,所以我想保持简单)。
我可以使用Image小部件来实现它 然后我切换到HTML小部件,但随后拖不起作用:没有错误没有任何东西,只是拖动不再拖动。
代码(问题出在拖动部分,我只列在代码的这一部分下面):

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之间触发哪个事件?

1 个答案:

答案 0 :(得分:0)

假设您的最终目标是使用原生HTML拖放支持(映射GWT)拖放HTML5 API窗口小部件,那么您遗漏了一些内容事情有效。你必须:

  • 制作元素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");  
      }
    });