所以我实现了一个非常简单的拖放文件上传小部件。基本上我的小部件是一个垂直面板,里面有几个标签和一个按钮。用户可以将文件拖入垂直面板或单击按钮并浏览文件。
我的问题是,当我将文件拖到垂直面板中时,每次我将项目拖到标签或按钮占用的空间上时,它都会触发 DragLeaveEvent。我希望它知道该项目位于垂直面板中,即使它位于标签或按钮的顶部。我确定我错过了一些简单的东西。我通过将这些 dom 处理程序添加到垂直面板来提供拖动功能:
addDomHandler(new DragEnterHandler() {
@Override
public void onDragEnter(DragEnterEvent event) {
System.out.println("drag enter");
highlight(true);
}
}, DragEnterEvent.getType());
addDomHandler(new DragLeaveHandler() {
@Override
public void onDragLeave(DragLeaveEvent event) {
System.out.println("drag leave");
highlight(false);
}
}, DragLeaveEvent.getType());
addDomHandler(new DragOverHandler() {
@Override
public void onDragOver(DragOverEvent event) {
}
}, DragOverEvent.getType());
addDomHandler(new DropHandler() {
@Override
public void onDrop(DropEvent event) {
System.out.println("drop");
// stop default behaviour
event.preventDefault();
event.stopPropagation();
// starts the fetching, reading and callbacks
if (fileUploadHandler != null) {
handleFiles(event.getDataTransfer(), fileUploadHandler);
}
highlight(false);
}
}, DropEvent.getType());