나는 드래그 앤 드롭을 GWT에서 사용하기 위해 정말로 힘들었다. 지난 3 일 동안, 기본 드래그 앤 드롭 애플리케이션을 만들려고했지만 실패했습니다. 현재 나는 그것을 끌 수는 있지만 어느 위치로든 떨어질 수는 없습니다.gwt dnd를 사용하여 GWT에서 드래그 앤 드롭
어떻게 해결할 수 있습니까? 우리는 onDragEnd를 수정해야합니까? 나는 특별히해야 할 일이 없다면 그럴 필요가 없다는 인상하에 있습니다. 나는 꽤 혼란 스럽다.
또한 드롭을 단일 영역으로 어떻게 제한합니까? 나는 우리가 DropController를 사용하여 그것을 할 수 있다는 것을 이해한다. 하지만 UiBinder를 사용하여 패널을 정의 했으므로이 패널을 DropController에서 링크로 다시 가져 오는 방법은 무엇입니까? 즉 RootPanel.get()은 내가 원하는 실제 패널이 아니라 기본 루트 패널을 제공합니다. RootPanel.get ("field-id")을 시도했지만 그 id를 사용할 수있는 경우에도 null을 표시합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
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()); } }
과 testpanel의 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);
}
을하지만 - 왜냐하면 나는 나 자신을 포지셔닝해서는 안된다고 생각하기 때문이다.