JAVA Drag and Drop Demo
DragSource에서 DropTarget으로 <<Transferable>> Data가 전송되는 일련의 과정.
DropTarget 생성자 중 가장 매개변수가 많은 것을 살펴보자.
DropTarget(Component c, int ops,DropTargetListener dtl,boolean act,FlavorTree ft)
예)
매개변수중 int ops부분을 살펴보자.
DnDConstants.ACTION_COPY_OR_MOVE 가 보인다.
DnDConstants 클래스는 Drag & Drop이 발생하는 경우 처리되는 오퍼레이션의 형태를 표현한 것이다.
ACTION_COPY_OR_MOVE 는 복사 혹은 이동을 표현한것이고,
ACTION_COPY는 복사만, ACTION_MOVE는 이동만 표현한것 등등 이 있다.
*DropTagetListener를 구현하는 과정에서 매개변수로 전달되는 것들이 미묘하게 다르다 ㅠ
드랍타겟 생성 ->드래그소스에서 읽어온 정보들을 Transferable하게 적재한다. ->드랍타켓에 운반 완료.
윈도우탐색기의 텍스트파일을 드래그앤 드랍하면 내용을 가져오는 예제
DNDText.java
DropTarget 생성자 중 가장 매개변수가 많은 것을 살펴보자.
DropTarget(Component c, int ops,DropTargetListener dtl,boolean act,FlavorTree ft)
예)
매개변수중 int ops부분을 살펴보자.
DnDConstants.ACTION_COPY_OR_MOVE 가 보인다.
DnDConstants 클래스는 Drag & Drop이 발생하는 경우 처리되는 오퍼레이션의 형태를 표현한 것이다.
ACTION_COPY_OR_MOVE 는 복사 혹은 이동을 표현한것이고,
ACTION_COPY는 복사만, ACTION_MOVE는 이동만 표현한것 등등 이 있다.
*DropTagetListener를 구현하는 과정에서 매개변수로 전달되는 것들이 미묘하게 다르다 ㅠ
드랍타겟 생성 ->드래그소스에서 읽어온 정보들을 Transferable하게 적재한다. ->드랍타켓에 운반 완료.
윈도우탐색기의 텍스트파일을 드래그앤 드랍하면 내용을 가져오는 예제
DNDText.java
- import java.io.*;
- import java.awt.dnd.*;
- import java.awt.datatransfer.*;
- import javax.swing.*;
- JTextArea editor;
- DropTarget target;
- public DnDText(){
- super("Drag & Drop");
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- setSize(450,500);
- setVisible(true);
- }
- /* DropTargetListener 인터페이스 구현을 위한 부분 */
- }
- }
- }
- //액션이 copy or move인 경우에 읽어들인다.
- if((dtde.getDropAction() &
- dtde.acceptDrop(dtde.getDropAction());
- try{
- //전달되는 파일을 리스트형태로 변환
- //파일리스트의 DataFlavor를 이용하여 tr에 저장
- //리스트의 첫번째 원소를 파일로 읽어들인다.
- char buf[] = new char[1024];
- int n = -1;
- editor.setText("");
- while((n=in.read(buf,0,1024))!=-1){
- }
- in.close();
- e.printStackTrace();
- }
- }
- }
- }
- new DnDText();
- }
- }
코드 정말 잘 봤습니다.
답글삭제한가지 이해가지 않는 부분이 있는데요, 파일을 드래그를 통해서 다른 컴포넌트로 전송하는데 파일을 잠시 Dataflavor형 인스턴스로 전환해 Transferable 형 변수를 매개로 파일을 전송한다고 생각하면 제대로 이해한 건가요? 41번째줄과 42번째줄이 정확이 어떤 방식으로 굴러가는지 궁금하네요! 메소드 getTransferData()의 인자 또한 이해가 잘 되지 않습니다.