RCP/SWT & JFACE

Drag & Drop 구현 방법

반응형

어플리케이션에 항목 드롭하기

  • 등록된 컨트롤에 데이터를 올려 놓을 경우 데이터를 받아 들일  있으며이때 DropTarget 인스턴스를 사용한다.
  • DropTarget 위젯이 선택할  있는 데이터의 유형과  위젯에서 수행하기로 공인된 동작 가지 모두 저장할  있다운영체제가 이러한 정보를 사용하여 항목이 해당 위젯을 지나갈 때  항목을 놓을  있는지에 대한 가시적인 피드백을 제공한다.
  • 우선 타겟을 등록하면, DropTargetListener DropTargetEvent 받으며 이벤트는 사용자가 컨트롤내에 어떤 것을 놓을 발생한다.

 

연산 상수

설명

DROP_COPY

 항목을 컨트롤 안이나 밖으로 드래그   복사한다.

DROP_MOVE

마우스를 놓은 위치로 항목을 이동시킨다.

DROP_LINK

항목을 놓으면 원본에 대한 링크를 생성한다.

DROP_NONE

항목을 놓아도 아무런 일이 일어나지 않는다.

 

 

Ex)

 

Int operation = DND.DROP_MOVE | DND.DROP_COPY

DROPTARGET tartget = new DropTarget(control, opration) // 해당 타겟을 지정하고 해당 타겟의 Drag 이벤트가 발생하였을 발생할 동작을 설정한다.

Transfer[] transfer = new Transfer[] { // 데이터의 유형을 선택한다.

TextTransfer.getInstance(),

RTFTransfer.getInstance()

};

Target.setTransfer(transfer);

Target.addDropListener(new DropTargetListener(){..});

 

 

Viewer에서 해당 드래그 이벤트를 실행시킬 경우

Transfer[] types = new Transfer[] {

FileTransfer.getInstance()

};

 

Viewer.addDropSupport(DND.DROP_COPY, types, new FileDropListener(this));

 

가장 중요한 부분은 Listener 동작시키는 작업이다.

  1. dragEnter() 항목을 끌고 가는 동안커서가 컨트롤의 경계부분으로 들어온다.
  2. dragOver() 커서가 항목을 끌고 가면서 컨트롤 위를 이동한다.
  3. dragOperationChanged() 사용자가 사용할 동작 유형을 바꿀 때마다  메소드를 호출 한다 이벤트는 주로 Ctrl이나 Option 등의 기능키를 누르거나   발생한다.
  4. dropAccept() 사용자가 컨트롤에서 항목을 놓는다 때가 애플리케이션이 이런 떨어트리는 작업을 거절하거나 수행할 동작유형을 변경할  있는 마지막 과정이다.
  5. Drop() 데이터를 놓는다리스너에서 주어진 데이터를 적절히 다룰  있는 로직을 구현해야 한다.

 

 메소드 에서는 DropTargetEvent 바등며  이벤트는 현재 동작 정보를 포함한다사용할 데이터 유형과 수행 동작을 변경하기 위해서는 각각의 currentDataType detail 필드를 수정한다.

여섯번재 메소드인 dragLeave() dropAccept()  호출 하기 전에 언제든지 호출   있으며애플리케이션에게 사용자가 커서를컨트롤 밖으로 이동햇지만 드롭하지 않았다고 알려준다.

 

DragSource는컨트롤을 데이터의 소스로 등록하기 위해 생성된다. DragSourListener 드래그 동작을 시작할  이벤트를 받으며 해당 항목을 놓을 때의 처리로직을 구현한다.

 

  1. dragStart() 사용자는  컨트롤에서 데이터 드래그를 시작한다드래그를 진행하기 위해서는 이벤트의 doit 필드를 true 설정해야 한다.
  2. dragSetData() 놓기를 수행한다 메소드 놓을 데이터를 제공하기 위해 이벤트의 data필드에 데이터를 넣는다.
  3. dragFinished() 놓는 동작을 성공적으로 끝낸다마무리 작업 원본데이터 삭제 작업 같은 작업을 여기에서 수행한다.


반응형

'RCP > SWT & JFACE' 카테고리의 다른 글

IWizardPage 인터페이스  (0) 2016.12.24
Draw2d 설명  (0) 2016.12.24
이벤트로 받은 키보드 멀티 인식 방법  (0) 2016.12.24
RCP 확장점 소개  (0) 2016.12.24
rcp toolbar에서 label등 각종 contribution item 생성방법  (0) 2016.12.24