📄 dnd入门学习.htm
字号:
effect”。鼠标图形同时也可以告诉我们在数据被Drop之后,什么样的操作会被执行,是拷贝还是移动还是别的什么。在windows中有以下几种鼠标图形:<BR>[attachment=453]
<BR>? ? 如果我们drag
over一个带有item的部件,比方说tree或者table,那么item会变成高亮表明我们会将数据Drop在这个item上,这个过程我们叫“drag
under effect”。<BR><BR><B>Transfer</B><BR><BR>? ? 有了DragSource 和
DropTarget之后,我们就需要一个载体来承载不同类型的数据,让这个载体在DragSource 和
DropTarget之间传递数据。Transfer实际上是一个提供数据在Java representation与platform
specific
representation之间交互的抽象类.在Java对象与特定的平台之间进行format,下面是几个format:<BR>? ?
TextTransfer String "hello world" <BR>? ? RTFTransfer String
"{\\rtf1\\b\\i hello world}" <BR>? ? FileTransfer String[] new
String[] {file1.getAbsolutePath(), file2.getAbsolutePath()} <BR>? ?
Transfer是传输的载体,TransferData真正的利用JNI将数据和本地操作系统发生关系。TransferData包含了很多特定于平台的公用的属性,应用不应该直接去访问这些属性。如果真的有必要去访问这些属性,那么我们可以通过扩展Transfer类来完成对特定平台的额外操作。<BR>?
?
另外,Transfer不只是可以用在DND中,也可以单独拿出来使用,例如实现Clipboard,可以在copy时将数据暂存于Clipboard中,past时再取出。这个和DND的在Drag时将数据暂存于Clipboard中,Drop时再取出类似。<BR><BR><BR><FONT
color=gray>[ 此贴被金鳞在2005-12-02 16:20重新编辑 ]</FONT></SPAN> </TD></TR>
<TR vAlign=bottom bgColor=#ffffff>
<TD colSpan=6>
<TABLE cellSpacing=1 cellPadding=4 bgColor=#e7e3e7>
<TBODY>
<TR>
<TD class=t_one align=middle>此帖被评分,最近评分记录
<TABLE>
<TBODY>
<TR>
<TD>财富:10(yipsilon)</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><IMG
src="DND入门学习.files/sigline.gif" align=absBottom>
<BR>金鳞岂是池中物,一遇风云便化龙<BR></TD></TR>
<TR vAlign=bottom bgColor=#ffffff>
<TD class=smalltxt colSpan=5><FONT color=red>[楼 主]</FONT> |
<B>Posted:</B> 2005年12月02日 16:10</TD>
<TD class=smalltxt align=right><A href="javascript:scroll(0,0)"><IMG
alt=顶端 src="DND入门学习.files/top.gif"></A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE><A name=3959>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellSpacing=1
cellPadding=0 width="100%" align=center bgColor=#e7e3e7>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"
vAlign=top width="20%" bgColor=#ffffff height="100%"><FONT face=Gulim
color=#000066><B>金鳞</B></FONT>
<TABLE cellSpacing=0 cellPadding=0 width="98%">
<TBODY>
<TR>
<TD align=middle><IMG src="DND入门学习.files/3462.jpg"
border=0></TD></TR></TBODY></TABLE>状态: <FONT color=red><B>离线</B></FONT>
<BR>级别: <FONT color=#555555><B>CEC版主</B></FONT><BR>精华: <A
href="http://www.eclipseworld.org/bbs/search.php?authorid=3462&digest=1"
target=_blank><FONT color=green><B>2</B></FONT></A> <BR>发帖: <FONT
color=green><B>247</B></FONT><BR>威望: <FONT color=#984b98><B>48
点</B></FONT><BR>财富: <FONT color=#984b98><B>191 元</B></FONT><BR>贡献: <FONT
color=red><B>0 点</B></FONT><BR>注册时间:2005-11-24<BR>最后登录:2006-03-28 </TD>
<TD vAlign=top width="80%" bgColor=#ffffff height="100%">
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" height="100%"
cellSpacing=0 cellPadding=4 width="99%" align=center>
<TBODY>
<TR>
<TD vAlign=top bgColor=#ffffff colSpan=6><A
href="http://www.eclipseworld.org/bbs/profile.php?action=show&uid=3462"><IMG
alt=查看作者资料 src="DND入门学习.files/profile.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/message.php?action=write&touid=3462"><IMG
alt=发送短消息 src="DND入门学习.files/message.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/sendemail.php?action=tofriend&tid=893"><IMG
alt=推荐此帖 src="DND入门学习.files/emailto.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/post.php?action=quote&fid=91&tid=893&pid=3959&article=1"><IMG
alt=引用回复这个帖子 src="DND入门学习.files/quote.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/post.php?action=modify&fid=91&tid=893&pid=3959&article=1"><IMG
src="DND入门学习.files/edit.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/job.php?action=report&tid=893&pid=3959"
target=_blank><IMG src="DND入门学习.files/report.gif"
align=absMiddle></A> <A title=QQ:9275760
href="http://wpa.qq.com/msgrd?V=1&Uin=9275760&Site=中国Eclipse社区&Menu=yes"
target=_blank><IMG src="DND入门学习.files/qq.gif" align=absMiddle></A>
<BR><BR><SPAN class=tpc_title></SPAN><BR><BR><SPAN
class=tpc_content>理解了拖拽的这些概念之后,下面我们就着一个简单的例子来运用一下。如图所示,这个例子中,左面的tree是DragSource,右面的table是DropTarget,我们从左面的tree中选择一条,拖进右边的table中:<BR><B></B><BR><IMG
onclick="if(this.width>=700) window.open('http://www.eclipseworld.org/bbs/attachment/Mon_0512/91_3462_ffd93f551d916df.gif');"
src="DND入门学习.files/91_3462_ffd93f551d916df.gif"
onload="if(this.width>'700')this.width='700';" border=0> <IMG
src="DND入门学习.files/9.gif"><BR><BR><BR><FONT color=gray>[
此贴被金鳞在2005-12-02 16:31重新编辑 ]</FONT></SPAN> </TD></TR>
<TR vAlign=bottom bgColor=#ffffff>
<TD colSpan=6><IMG src="DND入门学习.files/sigline.gif" align=absBottom>
<BR>金鳞岂是池中物,一遇风云便化龙<BR></TD></TR>
<TR vAlign=bottom bgColor=#ffffff>
<TD class=smalltxt colSpan=5><FONT color=red>[1 楼]</FONT> |
<B>Posted:</B> 2005年12月02日 16:18</TD>
<TD class=smalltxt align=right><A href="javascript:scroll(0,0)"><IMG
alt=顶端 src="DND入门学习.files/top.gif"></A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE><A name=3966>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellSpacing=1
cellPadding=0 width="100%" align=center bgColor=#e7e3e7>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"
vAlign=top width="20%" bgColor=#ffffff height="100%"><FONT face=Gulim
color=#000066><B>金鳞</B></FONT>
<TABLE cellSpacing=0 cellPadding=0 width="98%">
<TBODY>
<TR>
<TD align=middle><IMG src="DND入门学习.files/3462.jpg"
border=0></TD></TR></TBODY></TABLE>状态: <FONT color=red><B>离线</B></FONT>
<BR>级别: <FONT color=#555555><B>CEC版主</B></FONT><BR>精华: <A
href="http://www.eclipseworld.org/bbs/search.php?authorid=3462&digest=1"
target=_blank><FONT color=green><B>2</B></FONT></A> <BR>发帖: <FONT
color=green><B>247</B></FONT><BR>威望: <FONT color=#984b98><B>48
点</B></FONT><BR>财富: <FONT color=#984b98><B>191 元</B></FONT><BR>贡献: <FONT
color=red><B>0 点</B></FONT><BR>注册时间:2005-11-24<BR>最后登录:2006-03-28 </TD>
<TD vAlign=top width="80%" bgColor=#ffffff height="100%">
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" height="100%"
cellSpacing=0 cellPadding=4 width="99%" align=center>
<TBODY>
<TR>
<TD vAlign=top bgColor=#ffffff colSpan=6><A
href="http://www.eclipseworld.org/bbs/profile.php?action=show&uid=3462"><IMG
alt=查看作者资料 src="DND入门学习.files/profile.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/message.php?action=write&touid=3462"><IMG
alt=发送短消息 src="DND入门学习.files/message.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/sendemail.php?action=tofriend&tid=893"><IMG
alt=推荐此帖 src="DND入门学习.files/emailto.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/post.php?action=quote&fid=91&tid=893&pid=3966&article=2"><IMG
alt=引用回复这个帖子 src="DND入门学习.files/quote.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/post.php?action=modify&fid=91&tid=893&pid=3966&article=2"><IMG
src="DND入门学习.files/edit.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/job.php?action=report&tid=893&pid=3966"
target=_blank><IMG src="DND入门学习.files/report.gif"
align=absMiddle></A> <A title=QQ:9275760
href="http://wpa.qq.com/msgrd?V=1&Uin=9275760&Site=中国Eclipse社区&Menu=yes"
target=_blank><IMG src="DND入门学习.files/qq.gif" align=absMiddle></A>
<BR><BR><SPAN class=tpc_title></SPAN><BR><BR><SPAN
class=tpc_content>我们先从DragSource开始:<BR><BR>//获得一个TextTransfer的实例,TextTransfer是Transfer的一个子类,<BR>//他提供将普通文本以Java
String的表示转换为特定于平台的表示的机制。<BR>TextTransfer
textTransfer=TextTransfer.getInstance();<BR><BR>//构造一个普通的tree<BR>dragTree=new
Tree(parent,SWT.FULL_SELECTION|SWT.SINGLE);<BR><BR>//将dragTree与DragSource绑定(一个widget只能帮定在一个DragSource),<BR>//并允许数据可以从DragSource被MOVE或COPY<BR>DragSource
source=new
DragSourc(dragTree,DND.DROP_MOVE|DND.DROP_COPY);<BR>//指定允许的textTransfer类型,可以是多个。<BR>source.setTransfer(new
Transfer[] { textTransfer
});<BR>//注册DragSourceListener。处理拖操作的一些事件<BR>source.addDragListener(new
MyDragSourceListener());<BR><BR>在MyDragSourceListener中有以下3个方法:<BR><BR>//
指定拖动开始的执行策略。<BR>public void dragStart(DragSourceEvent
event){<BR> //在这里可以设置一些条件,如果不符合条件,比方说选中的treeitem是根,<BR>
//则不可拖动<BR> if(treeitem是根){<BR>
event.doit=false;<BR>
}<BR>}<BR><BR>//dragSetData方法在dragStart通过之后才被调用。这个方法可能会因为同一种传输<BR>//类型多次set或不同的多种传输类型的set而被多次调用,象windows等有些平台<BR>//中,dropTarget可以在鼠标移动的过程中请求数据,但是在Motif等平台中,只可以<BR>//在drop操作完成之后才可以请求数据,所以在这个方法中不要假设drag
and
drop操<BR>//作已经完成.在这个方法中是无法知道data将被drop到哪里.<BR>//set的Data也要符合指定的Transfer的format类型。<BR>
public void dragSetData(DragSourceEvent event){<BR>
//在这里可以为DragSourceEvent添加数据,这个方法在拖动过程中<BR> //会被不停的调用<BR>
TreeItem selection =
DragAndDrop.this.dragTree.getSelection()[0];<BR>
event.data=selection.getText();<BR>
}<BR><BR> // 根据事先指定好的操作类型来处理操作结果<BR>
public void dragFinished(DragSourceEvent event){<BR>
if(event.detail==DND.DROP_MOVE){<BR>
//remove selection TreeItem<BR>
}<BR> }</SPAN> </TD></TR>
<TR vAlign=bottom bgColor=#ffffff>
<TD colSpan=6><IMG src="DND入门学习.files/sigline.gif" align=absBottom>
<BR>金鳞岂是池中物,一遇风云便化龙<BR></TD></TR>
<TR vAlign=bottom bgColor=#ffffff>
<TD class=smalltxt colSpan=5><FONT color=red>[2 楼]</FONT> |
<B>Posted:</B> 2005年12月02日 16:55</TD>
<TD class=smalltxt align=right><A href="javascript:scroll(0,0)"><IMG
alt=顶端 src="DND入门学习.files/top.gif"></A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE><A name=3985>
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellSpacing=1
cellPadding=0 width="100%" align=center bgColor=#e7e3e7>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"
vAlign=top width="20%" bgColor=#ffffff height="100%"><FONT face=Gulim
color=#000066><B>金鳞</B></FONT>
<TABLE cellSpacing=0 cellPadding=0 width="98%">
<TBODY>
<TR>
<TD align=middle><IMG src="DND入门学习.files/3462.jpg"
border=0></TD></TR></TBODY></TABLE>状态: <FONT color=red><B>离线</B></FONT>
<BR>级别: <FONT color=#555555><B>CEC版主</B></FONT><BR>精华: <A
href="http://www.eclipseworld.org/bbs/search.php?authorid=3462&digest=1"
target=_blank><FONT color=green><B>2</B></FONT></A> <BR>发帖: <FONT
color=green><B>247</B></FONT><BR>威望: <FONT color=#984b98><B>48
点</B></FONT><BR>财富: <FONT color=#984b98><B>191 元</B></FONT><BR>贡献: <FONT
color=red><B>0 点</B></FONT><BR>注册时间:2005-11-24<BR>最后登录:2006-03-28 </TD>
<TD vAlign=top width="80%" bgColor=#ffffff height="100%">
<TABLE style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" height="100%"
cellSpacing=0 cellPadding=4 width="99%" align=center>
<TBODY>
<TR>
<TD vAlign=top bgColor=#ffffff colSpan=6><A
href="http://www.eclipseworld.org/bbs/profile.php?action=show&uid=3462"><IMG
alt=查看作者资料 src="DND入门学习.files/profile.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/message.php?action=write&touid=3462"><IMG
alt=发送短消息 src="DND入门学习.files/message.gif" align=absMiddle></A> <A
href="http://www.eclipseworld.org/bbs/sendemail.php?action=tofriend&tid=893"><IMG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -