2010-06-09 5 views
3

나는 드래그 앤 드롭을 GWT에서 사용하기 위해 정말로 힘들었다. 지난 3 일 동안, 기본 드래그 앤 드롭 애플리케이션을 만들려고했지만 실패했습니다. 현재 나는 그것을 끌 수는 있지만 어느 위치로든 떨어질 수는 없습니다.gwt dnd를 사용하여 GWT에서 드래그 앤 드롭

  1. 어떻게 해결할 수 있습니까? 우리는 onDragEnd를 수정해야합니까? 나는 특별히해야 할 일이 없다면 그럴 필요가 없다는 인상하에 있습니다. 나는 꽤 혼란 스럽다.

  2. 또한 드롭을 단일 영역으로 어떻게 제한합니까? 나는 우리가 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); 
} 

을하지만 - 왜냐하면 나는 나 자신을 포지셔닝해서는 안된다고 생각하기 때문이다.

답변

0

GWT dnd를 처음 접한다면, working demo을 사용해 보시지 않으시겠습니까?

많은 예제가 있으며 모든 소스 코드를 사용할 수 있습니다.

(, 당신은 자신을으로 위치 어떻게해야하지 않을 아니오) 당신은 드롭 타겟 (들)에 DragOverHandler를 추가해야

0

을 : 그것은 아무것도하지 않는 경우에도, 그것은 드롭으로 구성 요소를 정의 목표.

물론이 구성 요소에 DropHandler를 정의해야합니다 (일반적으로 시각적 피드백을 위해 DragEnterHandler 및 DragLeaveHandler를 선택적으로 정의해야 함).

DragEndHandler는 대상에 도달하지 않은 경우 (드래그되지 않은 영역에서 끌기 드래그), 드래그 된 객체의 상태를 변경하는 데 사용되는 경우에도 호출되며, DropHandler의 방향을 설정해야 할 수도 있습니다. DragEndHandler (공유 변수, EventBus 등)로 떨어 뜨릴 때 성공을 전달하십시오.