2015-02-05 8 views
0

SWT에서 드래그 앤 드롭 기능을 구현 중입니다. 여기SWT에서 이벤트가 두 번 이상 끊김

내 코드 드롭

private class MyDropTargetAdapter extends DropTargetAdapter { 

@Override 
public void dragEnter(DropTargetEvent event) { 
    event.detail = DND.DROP_LINK; 
} 

/** 
* {@inheritDoc} 
*/ 
@Override 
public void dragOver(DropTargetEvent event) { 
    // Do some functionality 
} 

/** 
* {@inheritDoc} 
*/ 
@Override 
public void drop(DropTargetEvent event) { 
    event.detail = DND.DROP_NONE; 
} 
} 

위해 드래그

private class MyDragSourceAdapter extends DragSourceAdapter { 

/** The m tree viewer. */ 
private final TreeViewer treeViewer; 

/** 
* Instantiates a new my drag source adapter. 
* 
* @param treeViewer the tree viewer 
*/ 
public MyDragSourceAdapter(TreeViewer treeViewer) { 
    this.treeViewer = treeViewer; 
} 

/** 
* {@inheritDoc} 
*/ 
@Override 
public void dragFinished(DragSourceEvent event) { 
    // clean buffer 
    // k = null; 
} 

/** 
* {@inheritDoc} 
*/ 
@Override 
public void dragSetData(DragSourceEvent event) { 
    event.data = "test"; 
} 

/** 
* {@inheritDoc} 
*/ 
@Override 
public void dragStart(DragSourceEvent event) { 

    if (some condition) { 
    // do something 
    return; 
    } 
    event.doit = false; 
} 
} 

를 들어 일부 시간 "로 dragOver()" 방법이라고 한 번 이상

니펫입니까? 드래그는 dragOver() 메서드가 호출 될 때까지 여러 번 발생합니다.

첫 번째 작업 후에 드롭 작업을 중지하고 싶습니다.

실제 강하가 발생하기 전에 마우스가 여전히 컨트롤 위에 마우스 때

+2

이 동작은 의도 한 것입니다. JavaDoc을 읽으면 커서가 드롭 대상 위로 이동하는 경우 이벤트가 발생합니다. 'drop()'이벤트를 듣고 drop.operation이 실제로 수행 될 때 정보를 얻는다. [DnD in SWT] (https://eclipse.org/articles/Article-SWT-DND/DND-in-SWT.html) 기사는 respecive 이벤트의 의미를 잘 설명합니다. –

+0

예, Rüdiger Herrmann이 맞습니다. Doc를 읽으십시오. drop 메소드가 여러 번 호출 될 것이므로이 메소드를 호출해도 추가 조치를 중지하는 논리를 작성합니다. –

답변

1

dragOver()이 발생 도와주세요. 아마도 drop()을 무시할 것입니다. 그러나 드롭이 모두 멈추지 않게하려면 DropTargetEventdetail 필드를 DND.DROP_NONE으로 설정하십시오.