Перетащите в GWT с помощью gwt dnd - PullRequest
3 голосов
/ 09 июня 2010

Я действительно изо всех сил пытался заставить Drag and Drop работать в GWT.Последние 3 дня я пытался создать простое приложение для перетаскивания и не смог.В настоящее время я могу перетаскивать его, но не могу попасть в любое место.

  1. Как мы можем это решить?Нужно ли модифицировать onDragEnd - у меня сложилось впечатление, что если я специально не должен что-то делать, мне не нужно?Я в замешательстве.

  2. Кроме того, как я могу ограничить падение какой-либо одной области?Я понимаю, что мы можем сделать это с помощью DropController.Но я определил панели с помощью UiBinder, так как мне вернуть эту панель обратно в DropController?т.е. RootPanel.get () дает мне основную корневую панель, а не фактическую панель, которую я хочу.Я попробовал RootPanel.get ("идентификатор поля"), но он показывает ноль, даже если этот идентификатор доступен.Что я делаю не так?

Код, который я написал, выглядит следующим образом:

public class TestPanel extends Composite implements
DragHandler, HasMouseDownHandlers, HasMouseUpHandlers, HasMouseMoveHandlers, HasMouseOutHandlers {

interface Binder extends UiBinder<Widget, TestPanel> { }
private static final Binder binder = GWT.create(Binder.class);

@UiField AbsolutePanel absolutePanel;

private PickupDragController TestDragController;

private Image img = new Image("./testicon.png");

public TestPanel(){
    initWidget(binder.createAndBindUi(this));
    absolutePanel.add(img);
    TestDragController = new PickupDragController(RootPanel.get(), false);
    AbsolutePositionDropController dropController = new AbsolutePositionDropController(
                                                          RootPanel.get());
    TestDragController.registerDropController(dropController);
    TestDragController.addDragHandler(this);
    TestDragController.makeDraggable(this, getDragHandle());
}

private Widget getDragHandle() {
    return img;
}

@Override
public void onDragEnd(DragEndEvent event) { }

@Override
public void onDragStart(DragStartEvent event) { }

@Override
public void onPreviewDragEnd(DragEndEvent event) throws VetoDragException { }

@Override
public void onPreviewDragStart(DragStartEvent event) throws VetoDragException { }

@Override
public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
    return addDomHandler(handler, MouseDownEvent.getType());
}

@Override
public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) {
    return addDomHandler(handler, MouseUpEvent.getType());
}

@Override
public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) {
    return addDomHandler(handler, MouseMoveEvent.getType());
}

@Override
public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
    return addDomHandler(handler, MouseOutEvent.getType());
}
}

и uibinder тестовой панели выглядит следующим образом:

<g:AbsolutePanel ui:field="absolutePanel" styleName="{style.panel}">
</g:AbsolutePanel>

Если кто-то может мне помочь, я буду очень признателен.

K

PS: Чтобы объяснить больше: я смог решить первый вопрос, обновив onDragEnd какследующее:

    @Override
public void onDragEnd(DragEndEvent event) {
    DragContext context = event.getContext();
    RootPanel.get().add(context.draggable, context.desiredDraggableX, context.desiredDraggableY);
}

но я не уверен, является ли это правильным решением - поскольку я думаю, что не должен заниматься позиционированием самостоятельно.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2013

Вы должны добавить DragOverHandler к цели (объектам) удаления: даже если он ничего не делает, он определяет компонент как цель удаления.

Конечно, вам все равно нужно определить DropHandler и для этого компонента (и, опционально, DragEnterHandler и DragLeaveHandler для визуальной обратной связи, в общем).

DragEndHandler вызывается, даже если цель не достигнута (перетаскивание прекращено в области без перетаскивания), оно используется для изменения состояния перетаскиваемого объекта, может потребоваться установить способ взаимодействия DropHandler Успешность перехода на DragEndHandler (общая переменная, EventBus и т. д.).

0 голосов
/ 09 августа 2010

Если вы новичок в GWT dnd, почему бы вам не попробовать рабочую демонстрацию ?

Существует множество примеров и доступен весь исходный код.

(И нет, вы не должны заниматься позиционированием самостоятельно)

...