Как получить startPosition при перетаскивании виджета (vaadin 8.3)?

У меня есть компонент в панели, с DragSourceExtension я могу передавать любые данные по DragData, но не могу получить относительные X и Y с DragStartEvent.

  • Я могу получить относительные X и Y конечной позиции с помощью DropEvent.

В vaadin 7 с DragAndDropWrapper.WrapperTransferable (переносимым) мы можем получить относительные X и Y при начале перетаскивания:

transferable.getMouseDownEvent().getClientX()
transferable.getMouseDownEvent().getClientY()

ОБНОВЛЕНИЕ: это часть кода:

DropTargetExtension<AbsoluteLayout> absoluteLayoutDropTargetExtension = new DropTargetExtension<>(sceneLayout);
...
absoluteLayoutDropTargetExtension.addDropListener(event -> {
Optional<Object> source = event.getDragData();
int x = event.getMouseEventDetails().getRelativeX();
int y = event.getMouseEventDetails().getRelativeY();

с x и y - текущая позиция мыши, но у меня нет начальной позиции для расчета разницы

ОБНОВЛЕНИЕ 2: в этом документе компонент и расширение пользовательского интерфейса я тестирую расширение пример.

public class CapsLockWarning extends AbstractExtension {
// You could pass it in the constructor
public CapsLockWarning(PasswordField field) {
    super.extend(field);
    System.out.println("CapsLockWarning");
}

// Or in an extend() method
public void extend(PasswordField field) {
    super.extend(field);
}

// Or with a static helper
public static void addTo(PasswordField field) {
    new CapsLockWarning(field);
}

}

@Connect(CapsLockWarning.class)
public class CapsLockWarningConnector extends AbstractExtensionConnector {

public CapsLockWarningConnector() {
    super();
    System.out.println("CapsLockWarningConnector");
}

@Override
protected void extend(ServerConnector target) {
    // Get the extended widget
    final Widget pw = ((ComponentConnector) target).getWidget();

    // Preparations for the added feature
    final VOverlay warning = new VOverlay();
    warning.setOwner(pw);
    warning.add(new HTML("Caps Lock is enabled!"));
    Window.alert("ssss");

    // Add an event handler
    pw.addDomHandler(new KeyPressHandler() {
        public void onKeyPress(KeyPressEvent event) {
            if (isEnabled() && isCapsLockOn(event)) {
                warning.showRelativeTo(pw);
                UiUtilities.showMessage("oh");
            } else {
                warning.hide();
            }
        }
    }, KeyPressEvent.getType());
}

private boolean isCapsLockOn(KeyPressEvent e) {
    return e.isShiftKeyDown() ^
            Character.isUpperCase(e.getCharCode());
}

}

UI:

    txtPassword = new PasswordField(bundle.getString("common.password"));
    txtPassword.setRequiredIndicatorVisible(true);
    binder.forField(txtPassword).asRequired(MessageFormat.format(bundle.getString("common.error.isRequiredFor"), bundle.getString("common.password")))
            .bind(HostEntity::getPassword, HostEntity::setPassword);
    txtPassword.addStyleName("inline-label");
    new CapsLockWarning(txtPassword);
    form.addComponent(txtPassword);

но конструктор CapsLockWarningConnector не запустился, и в пользовательском интерфейсе не произошло никаких действий.


person Alireza    schedule 28.02.2018    source источник
comment
Я думаю, вам нужно создать какое-то расширение для этого. Но зачем вам X, Y? В чем проблема?   -  person pirho    schedule 28.02.2018
comment
@pirho Мне нужно создать карту и сделать json, чтобы сохранить ее. по этой причине мне нужны x и y всех объектов.   -  person Alireza    schedule 28.02.2018
comment
Просто какая-то пользовательская реализация или карта OL / Leaflet?   -  person pirho    schedule 28.02.2018
comment
@pirho позволяет мне задать еще один вопрос: как переместить изображение (например), добавленное в абсолютную панель, из одной позиции в другую? мне нужно сбросить верхнюю и левую часть изображения в методе addDropListener DropTargetExtension?   -  person Alireza    schedule 28.02.2018
comment
Я могу попытаться ответить, но было бы лучше, если бы вы обновили свой вопрос и добавили некоторый код, который вы сейчас пытаетесь — как в приведенном выше примере комментариев — и где вы застряли. Я не уверен, что вы подразумеваете под сбросом?   -  person pirho    schedule 28.02.2018
comment
@pirho добавлена ​​часть кода   -  person Alireza    schedule 03.03.2018
comment
Ок, я примерно так же предполагал. Кажется, вам нужно событие MouseDown. Это может вам помочь.   -  person pirho    schedule 03.03.2018
comment
@pirho: пожалуйста, смотрите Updte   -  person Alireza    schedule 05.03.2018