Eclipse插件开发之拖拽功能
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插件开发之拖拽功能相关推荐
- vuedraggable能实现自由拖拽功能吗?_基于 vue.js 仿禅道主页拖拽效果
今天给大家分享一个超不错的Vue仿禅道首页拖拽布局VueDndKon. vue-dnd-kon 基于vuedraggable实现的仿禅道首页拖拽项目.支持模块上下及左右自由拖动布局. 主页分为左右两栏 ...
- android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例
Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...
- android 当前置顶的控件,Android利用RecyclerView实现全选、置顶和拖拽功能示例
前言 今天给大家分享是如何在RecyclerView实现全选,ItemTouchHelper实现侧滑删除,拖拽功能.比较基础.关于RecyclerView的强大,就不多说了.在Android L SD ...
- java 拖拽生成_JAVA UI 拖拽功能
java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持 他们有dragEnabled属性.这些JComponent包括: javax.swing.JColorChooser ...
- Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题
有一些 web 前端的交互,必须有鼠标轨迹才能成功的实现拖拽功能. 而 selenium 自带的 ActionChains 方法,是一瞬间从 A 点到 B 点的. 解决思路: 利用元素返回的相对浏览器 ...
- tableau必知必会之拖拽功能失效是怎么回事
大家反馈的问题如上图所示,可以发现,原本正常的拖拽功能失效了. 数据粉们别着急,这不是 Bug. 首先,我们来看一下你可能遇到的拖拽失效的几种情况: 一.维度.度量无法拖入标记卡 二.维度.度量无法拖 ...
- easyui树拖拽排序java_easyui tree 拖拽功能并将数据返回后台保存至数据库
1.需要实现tree的拖拽功能,首先在定义一个tree时候需要设置 dnd : true 2.easyui 给我们提供了一个onDrop : function(target, source, poin ...
- css元素可拖动,使用css-transform实现更好的拖拽功能
拖拽功能是目前网页上一种非常常见的功能,例如"登录弹窗"的拖拽.本文将使用transform来实现这一功能. 一.拖拽的用户行为分析与原理解析 二.代码实现 三.总结 本文所涉及的 ...
- swift 拖动按钮_Swift下使用UICollectionView 实现长按拖拽功能
导读 简单用Swift写了一个collectionview的拖拽点击排序效果; 拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等. 效果 主要代码 手势长按移动 1.给Colle ...
- js实现鼠标拖拽功能基本思路
如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...
最新文章
- Set和存储顺序深入探讨、SortedSet排序的示例
- tableau必知必会之如何将 Tableau Server 从 Windows 迁移到 Linux 的方法
- SpringSecurity OAuth2中表结构说明
- AT2305-[AGC010D]Decrementing【博弈论】
- 14天学会安卓开发(附PDF文档和全部示例代码)
- sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接
- mui与java开发实例_mui开发的app例子,非常好资源,适合初学者
- 项目启动时 xml报错:Could not find SQL statement to include with refid 'mbgl.panDuanZbsfkxg'
- “土夅”应尽快加入汉字编码
- ElasticSearch ​What is Learning to Rank?
- 熊猫烧香病毒专杀下载
- eda多功能数字钟课程设计_适用多功能数字钟(EDA技术课程设计)
- android屏幕截图代码,android中实现整个屏幕截图的代码
- SiamFC 文章阅读
- python爬取微博用户信息_Python爬取新浪微博用户信息及内容
- [渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料(1)
- Django博客项目(一)—— 注册和登录页面
- 解析京东大数据下高效图像特征提取方案
- 二、Contiki移植
- OpenCV计算图像像素最大值、最小值