Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GWT DragStartEvent vs MouseDownEvent_Gwt_Drag And Drop - Fatal编程技术网

GWT DragStartEvent vs MouseDownEvent

GWT DragStartEvent vs MouseDownEvent,gwt,drag-and-drop,Gwt,Drag And Drop,我使用普通的遗留GWT DnD而不是GWT DnD库(因为我不需要DnD小部件,只需要普通数据,所以我希望保持简单)。 我可以使用源代码的图像小部件来实现它。 然后我切换到HTML小部件,但拖动不起作用:没有错误,没有什么,只是拖动不再拖动。 代码(问题在拖动部分,我只在下面列出代码的这一部分): 怎么了? 看起来没有DragStartEvent,因为在我单击拖动并移动鼠标以放置目标后,浏览器会选择介于两者之间的内容(拖动开始以放置目标) 为了便于调查,我添加了一个MouseDownHandle

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

怎么了?
看起来没有DragStartEvent,因为在我单击拖动并移动鼠标以放置目标后,浏览器会选择介于两者之间的内容(拖动开始以放置目标)

为了便于调查,我添加了一个MouseDownHandler,实际上是一个MouseDownEvent


所以问题是:如何控制GWT将在DragStartEvent和MouseDownEvent之间触发哪个事件?

假设您的最终目标是使用本机的
GWT
拖放支持(映射
HTML5API
)拖放
HTML
小部件,那么您就缺少了一些让事情正常工作的部分。你必须:

  • 使元素可拖动(在代码中看不到):

  • 向元素添加一个
    DragStartHandler
    ,并设置要传输的数据(如您所做的):

  • 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");  
      }
    });
    

浏览器怎么样?您是否尝试过简单地
preventDefault()
DragStartEvent?@andrea boscolo:到目前为止,我在Firefox和chrome上进行了测试(可能相同:两者都包括webkit)。我想阻止老鼠下山。我不明白你的建议:我怎样才能阻止鼠标下移——假设我能得到DragStart--Tx@andrea-我添加了event.preventDefault();给我的鼠标管理员。它不能阻止鼠标向下开火。但是,不再有从MouseDown到MouseUp的选择。所以我的结论是,它阻止了鼠标按下后触发的默认操作。因此,它并不能解决我的问题,那就是避免这个MouseDown事件,而是触发DragStart。有时(不太常见),当我在移动鼠标时“MouseDown”时,我会收到一个DragStart事件。实际上,我的意思是将
preventDefault()
放入
addDragStartHandler
中,以避免浏览器在开始拖动文本时执行的默认操作。这不是对你问题的直接回答,而是一种让拖放工作正常进行的方法。但是总体想法是错误的,您不能期望
DragStartEvent
通过
preventDefault()
stopPropagaton()
MouseDownEvent.Tx;事实上你的代码证实了我以前的想法。我只是让“拖动部分”的代码出现在我的问题中。除了:“theWidget.getElement().setDragable(Element.Dragable_TRUE),我没有把它放进去,因为它不是图像小部件所必需的,也不是HTML小部件***,wometimes会根据鼠标移动来拖动它(很难获取和复制)。所以我仍然需要一个解决方案。
theWidget.addDragStartHandler(new DragStartHandler() {
  public void onDragStart(DragStartEvent event) {
    event.setData(data, "some data" );
  }
});
targetWidget.addDragOverHandler(new DragOverHandler() {
  public void onDragOver(DragOverEvent event) {
    // Some kind of effect, if you like.
  }
});
targetWidget.addDropHandler(new DropHandler() {
  public void onDrop(DropEvent event) {
    event.PreventDefault();
    String data = event.getData("data");  
  }
});