1. 클립보드와 드레그앤 드롭
2. Java 의 DND 매커니즘
3. Java DND 매커니즘의 캡슐화
4 . 예제 구현
1. 클립보드와 드레그앤 드롭
클립보드와 드레그앤 드롭을 모르는 사람은 없을것입니다.
클립보드는 여러 프로그램들이 데이타를 공유할 수 있도록
데이타를 저장하는 특별한 장소입니다.
예를 들어,
메모장에서 글을 복사(Ctrl+C) 해서 에디트플러스(Ctrl+V)에 붙혀넣기 할때
클립보드를 거쳐서 데이타가 이동하는 것입니다.
윈도2000인경우 시작->실행 에서 clipboard.exe 를 실행하면 클립보드를
볼 수 있습니다.
Ctrl+C 를 하는 순간 해당데이타가 클립보드에 보여질 것입니다,
드레그앤드롭은 특정한 데이타를 끌어서(드레그)
다른 애플리케이션에 놓으면(드롭) 데이타가 이동하는 일련의 과정입니다.
예를 들어
윈도우탐색기에서 파일하나를 끌어서 인터넷익스플로러에 놓으면
해당 파일이 열리게 됩니다.
클립보드와 드레그앤 드롭은 클립보드를 거치느냐 안 거치느냐의 차이뿐,
이동하는 데이타를 정의하는 부분은 똑같습니다.
즉, 이동하는 데이타의 유형이 단순 텍스트인지 아니면 파일인지를 정의한 정보를
가지고 각각의 애플리케이션들이 이를 해석하여 작동하게 됩니다.
데이타의 유형은 mine-type 을 이용합니다.
클립보드와 드레그앤드롭에서 이동하는 데이타는
실제 데이타의 내용뿐아니라, 그 데이타의 유형을 정의하는 정보를 함께 가지고 있는 것입니다.
첫번째 클립보드예제에서는 당연히 문자열유형이 정의되어 있을것이고,
두번째 드래그앤드롭예제 에서는 파일유형이 정의되어 있을것입니다.
이제 한번 자신이 가진 여러 프로그램들을 돌려보면서 클립보드와 드레그앤드롭을 해 봅시다.
Ctrl+드롭하면 데이타가 "복사"되며 그냥 드롭하면 데이타가 "이동"하는것도 볼수 있습니다.
아래의 마우스커서는 드레그앤드롭할때 바뀌는 커서들입니다.
Cursor Icons for Drag and Drop
Microsoft Solaris/ Description
Windows Linux
Copy. The component underneath accepts this type of data.
Copy. The area underneath will not accept this data.
Move. The component underneath accepts this type of data.
Move. The area underneath will not accept this data.
[http://java.sun.com/docs/books/tutorial/tut-swing/uiswing/misc/dnd.html 에서 발췌]
거의 모든 애플리케이션들의 메뉴바에서 편집 메뉴를 보셨을겁니다..
편집 Edit
잘라내기 Cut
복사 Copy
붙혀넣기 Paste
지우기 Delete
우리가 코딩하면서 죽어라 사용하는 메뉴지요...
이것의 내부에서는 클립보드와 드레그앤드롭의 데이타 이동을
고스란히 이용하고 있습니다.
출처 : 자바 개발자 모임(네이버) - 출처 블로그 : I Love Medic