SWT中的拖放支持 - 拖放原理概述
SWT中有關(guān)拖放操作的類都在org.eclipse.swt.dnd包中。該包中主要的接口和類如下所示:
類名 功 能 描 述
Clipboard 剪貼板類,可以實(shí)現(xiàn)對剪貼板的操作
DND 類似于SWT類,封裝了拖放時所用的一些常量
DragSource 拖放源類,可將一個控件定義為拖放源
DropTarget 拖放目標(biāo)類,可將一個空間定義為拖放目標(biāo)
DragSourceListen和 拖放源控件時所觸發(fā)的事件,觸發(fā)事件的具體信息通過DragSourceEvent傳遞過來
DragSourceAdapter
DropSourceListen和 拖放目標(biāo)控件時所觸發(fā)的事件,觸發(fā)事件的具體信息通過DragTargetEvent傳遞過來
DropSourceAdapter
Transfer 數(shù)據(jù)傳輸類,用于將Java數(shù)據(jù)轉(zhuǎn)換為系統(tǒng)本地的數(shù)據(jù),反之亦然。通常用于拖
放操作和剪貼板操作。通常使用其子類 TextTransfer類、FileTransfer類
和RTFTransfer類等
看似簡單的拖放操作,其實(shí)過程相當(dāng)復(fù)雜,現(xiàn)在就將一個拖放過程分解開來,分析一下拖放的過程。
1、要有一個拖放源,也就是”拖的是什么“。簡單的理解就是可以進(jìn)行拖放的控件。只有光標(biāo)進(jìn)入到可拖放
控件的區(qū)域,才可以開始拖放操作。SWT中使用DragSource類來定義一個拖放源對象。
2、還要有一個拖放目標(biāo),也就是”放到哪里“。簡單的理解就是可接受源的目標(biāo)控件。只有當(dāng)光標(biāo)進(jìn)入到目標(biāo)控件的區(qū)域時,才可以進(jìn)行拖放的操作。SWT中使用DragTarget類來定義一個拖放目標(biāo)對象。
3、要在拖和放操作之間搭建一個橋梁,將拖的數(shù)據(jù)放到目標(biāo)對象中。
拖放操作無非是將源的數(shù)據(jù)放置到目標(biāo)對象中,SWT中的處理是在拖的過程中將Java的數(shù)據(jù)轉(zhuǎn)化為本地保存的全局變量數(shù)據(jù),然后在放的過程中,再從本地保存的全局變量中將數(shù)據(jù)取出。SWT中使用Transfer類來定義一個轉(zhuǎn)化數(shù)據(jù)的過程。
要想理解拖放的全過程,關(guān)鍵是要理解3個概念:
拖放源(DragSource)、傳輸數(shù)據(jù)(Transfer)、拖放目標(biāo)(DragTarget)。