Итак, я реализовал очень простой виджет загрузки файлов с перетаскиванием. В основном мой виджет представляет собой вертикальную панель с несколькими ярлыками и кнопкой внутри. Пользователь может перетащить файл в вертикальную панель или нажать кнопку и просмотреть файл.Загрузка файла перетаскивания GWT не работает
Проблема в том, что когда я перетаскиваю файл на вертикальную панель, он запускает DragLeaveEvent каждый раз, когда я перетаскиваю элемент по пространству, которое занимают метки или кнопки. Я хочу, чтобы он знал, что элемент находится на вертикальной панели, даже если он находится поверх метки или кнопки. Я уверен, что мне не хватает чего-то простого. Я обеспечить функциональность перетаскивания путем добавления этих обработчиков Dóm к вертикальной панели:
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());
Я вижу, как это показывает мне, какие элементы являются дети, но то, что я хочу сделать это перетащить файл в любом месте в вертикальной панели и быть в состоянии бросить его, но я не в состоянии сделать это, потому что обработчики перетаскивания рассмотрите ярлыки и прочее не в панели. Я хочу, чтобы файл рассматривался внутри вертикальной панели независимо от того, пересекается ли он над меткой или кнопкой – Will
. Я полагаю, что вы получаете 'DragEnter',' DragOver' и 'DragLeave' для каждого дочернего элемента (из-за пузырьков событий) , поэтому вы хотите обрабатывать только те события, которые непосредственно нацелены на панель; т. е. игнорировать события, которые нацелены на ваш ярлык и кнопку. –
Да, но проблема остается в том, что она отправляет событие перетаскивания, когда я все еще нахожусь внутри панели, но перехожу на ярлык, потому что он думает, что он покидает панель и входит в ярлык, даже думал, что ярлык находится внутри панели. – Will