1 Eclipse拖拽概述

操作系统支持文件拖拽等功能,我们可以将文件通过鼠标选中拖动到其他位置,实现移动或者复制等功能。Eclipse插件开发也可支持用户自定义的拖拽行为。平时我们见到的拖动eclipse的各个视图窗口,调整布局,将java文件直接拖动到本地某个目录。这些都是eclipse拖拽支持的表现。要想实现拖拽,可以对eclipse预先设定好的拖拽接口进行定制扩展,实现自己的拖拽功能。

2 实现拖拽的几个要点

Eclipse的拖拽支持是对java SWT的拖拽功能的延伸,自己实现了一套拖拽的API ,我们如果需要实现拖拽,可以继承eclipse的拖拽相关类,部分不能满足我们自己的个性化需求,需要重写一些方法,实现特定的拖拽功能。拖拽需要明确几个要点,即将哪个对象拖拽到哪个对象,被拖拽的对象即拖拽源(DragSource),接受拖拽对象的对象即目标对象(DrogTarget),从拖拽源到目的地需要一个数据的传输载体即Tansfer,用于管理数据如何传递,限定拖拽的数据类型,并做好拖拽的数据校验,被选择拖拽的对象是否是合法的对象。同时还需要两个监听,一个是DragSourceListener,用户监听对象是否发生了拖拽事件,并处理发生改事件的逻辑,DropTargetListener用户监听是否发生了拖拽释放事件,并处理拖拽释放的逻辑。

 3 实现步骤说明

3.1 定义拖拽源dragSource

想要某个对象支持拖拽,需要为该对象添加DragSourceListener,在eclipse中一般是视图中的对象,当然,需要什么类型支持拖拽完全由你的transfer定义,被拖的对象类型与指定tansfer定义的类型一致就可以拖拽。

publicclass ComponentDragListenerimplements DragSourceListener {

publicvoiddragStart(DragSourceEvent event);

publicvoiddragSetData(DragSourceEvent event);

publicvoiddragFinished(DragSourceEvent event);

}

需要实现三个方法:

dragStart(DragSourceEventevent):鼠标进入开始拖动的行为定义,一般是拖动数据的初始化。

dragSetData(DragSourceEventevent):拖动过程的行为,一般是将被拖动对象的数据设置到事件源对象中。

dragFinished(DragSourceEventevent):拖动完成的后续处理。

3.2定义拖拽传输对象transfer

哪些对象可以被拖动需要做约束,当拖拽开始,数据如何做传递需要控制,Tansfer就是拖动源到目的地的桥梁。它与DragSourceListener、DrogTargetListner密切相关,每一个拖拽监听器接口必须要指定自己的Tansfer,定义Tansfer需要实现Transfer类,如下形式:

publicclass BrTransfer extends Transfer {

abstractpublic TransferData[] getSupportedTypes();

abstractpublicbooleanisSupportedType(TransferData transferData);

abstractprotectedint[] getTypeIds();

abstractprotected String[] getTypeNames();

abstractprotectedvoid javaToNative(Object object, TransferData transferData);

abstractprotected Object nativeToJava(TransferDatatransferData);

protectedboolean validate(Objectobject) {

returntrue;

}

}

重点说明以下2个重要的方法,其他方法基本见名知意。主要是校验及判断拖拽对象的类型:

javaToNative (Object object, TransferDatatransferData):拖源拽的数据进行流化处理

nativeToJava(TransferData transferData):将数据恢复到目的地并重新加载到接受拖拽的对象。

3.3定义拖拽释放目的地drogTarget

当某个对象接收到一个拖拽源,需要做出相应的处理,能够接受拖拽源的对象需要实现DropTargetListener,该接口源于java Swing 事件监听接口,如下所示:

publicclassComponentDropListener implements DropTargetListener {

publicvoid dragEnter(DropTargetEvent event);

publicvoid dragLeave(DropTargetEvent event);

publicvoid dragOperationChanged(DropTargetEvent event);

publicvoid dragOver(DropTargetEvent event);

publicvoid drop(DropTargetEvent event);

publicvoid dropAccept(DropTargetEvent event);

}

需要实现的接口方法较多,eclipse为我们提供了一些实现类DropTargetAdapter或者JdtViewerDropAdapter,JdtViewerDropAdapter又继承了DropTargetAdapter,可以通过继承该类简化一些实现方法。JdtViewerDropAdapter主要是针对视图拖拽支持的一个适配器。拖拽视图中的对象基本上继承该类,重写三个方法 performDrop, validateDrop , getActualTarget 即可。

3.4 拖拽行为定义

拖动事件发生,用户可能需要实现的行为是复制、粘贴、移动等,eclipse. org.eclipse.swt.dnd.DND定义了一些时间行为,

DROP_COPY     当拖进/出该control时,对象被拷贝。
DROP_MOVE      对象被移出当前位置到被拖曳-投放到的位置。
DROP_LINK      投放对象时生成一个原始位置上项目的链接。
DROP_NONE       当对象被投放时,什么也不做

Eclipse插件开发之拖拽功能相关推荐

  1. vuedraggable能实现自由拖拽功能吗?_基于 vue.js 仿禅道主页拖拽效果

    今天给大家分享一个超不错的Vue仿禅道首页拖拽布局VueDndKon. vue-dnd-kon 基于vuedraggable实现的仿禅道首页拖拽项目.支持模块上下及左右自由拖动布局. 主页分为左右两栏 ...

  2. android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例

    Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...

  3. android 当前置顶的控件,Android利用RecyclerView实现全选、置顶和拖拽功能示例

    前言 今天给大家分享是如何在RecyclerView实现全选,ItemTouchHelper实现侧滑删除,拖拽功能.比较基础.关于RecyclerView的强大,就不多说了.在Android L SD ...

  4. java 拖拽生成_JAVA UI 拖拽功能

    java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持 他们有dragEnabled属性.这些JComponent包括: javax.swing.JColorChooser ...

  5. Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题

    有一些 web 前端的交互,必须有鼠标轨迹才能成功的实现拖拽功能. 而 selenium 自带的 ActionChains 方法,是一瞬间从 A 点到 B 点的. 解决思路: 利用元素返回的相对浏览器 ...

  6. tableau必知必会之拖拽功能失效是怎么回事

    大家反馈的问题如上图所示,可以发现,原本正常的拖拽功能失效了. 数据粉们别着急,这不是 Bug. 首先,我们来看一下你可能遇到的拖拽失效的几种情况: 一.维度.度量无法拖入标记卡 二.维度.度量无法拖 ...

  7. easyui树拖拽排序java_easyui tree 拖拽功能并将数据返回后台保存至数据库

    1.需要实现tree的拖拽功能,首先在定义一个tree时候需要设置 dnd : true 2.easyui 给我们提供了一个onDrop : function(target, source, poin ...

  8. css元素可拖动,使用css-transform实现更好的拖拽功能

    拖拽功能是目前网页上一种非常常见的功能,例如"登录弹窗"的拖拽.本文将使用transform来实现这一功能. 一.拖拽的用户行为分析与原理解析 二.代码实现 三.总结 本文所涉及的 ...

  9. swift 拖动按钮_Swift下使用UICollectionView 实现长按拖拽功能

    导读 简单用Swift写了一个collectionview的拖拽点击排序效果; 拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等. 效果 主要代码 手势长按移动 1.给Colle ...

  10. js实现鼠标拖拽功能基本思路

    如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...

最新文章

  1. Set和存储顺序深入探讨、SortedSet排序的示例
  2. tableau必知必会之如何将 Tableau Server 从 Windows 迁移到 Linux 的方法
  3. SpringSecurity OAuth2中表结构说明
  4. AT2305-[AGC010D]Decrementing【博弈论】
  5. 14天学会安卓开发(附PDF文档和全部示例代码)
  6. sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接
  7. mui与java开发实例_mui开发的app例子,非常好资源,适合初学者
  8. 项目启动时 xml报错:Could not find SQL statement to include with refid 'mbgl.panDuanZbsfkxg'
  9. “土夅”应尽快加入汉字编码
  10. ElasticSearch ​What is Learning to Rank?
  11. 熊猫烧香病毒专杀下载
  12. eda多功能数字钟课程设计_适用多功能数字钟(EDA技术课程设计)
  13. android屏幕截图代码,android中实现整个屏幕截图的代码
  14. SiamFC 文章阅读
  15. python爬取微博用户信息_Python爬取新浪微博用户信息及内容
  16. [渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料(1)
  17. Django博客项目(一)—— 注册和登录页面
  18. 解析京东大数据下高效图像特征提取方案
  19. 二、Contiki移植
  20. OpenCV计算图像像素最大值、最小值

热门文章

  1. 面试记录五:腾讯后台研发
  2. KB4484127 更新导致ACCESS数据库查询报 Query '' is corrupt 异常解决方案
  3. BPSK调制与解调-MATLAB基带仿真
  4. 萤火虫小程序_新款预览 | 原创森林系列 冰川上 / 小程序改版啦。
  5. C#操作Excel数据库方法
  6. 如何给ppt编辑页码_PPT中怎样设置页码
  7. 7.4 SiamFC
  8. 文本转语音的接口(开放免费)
  9. 【虚拟机】VirtualBox 安装 Windows 11 虚拟机简介
  10. TLSF算法1:二级索引的计算