DragTracker接口是gef中用于跟踪鼠标或键盘执行拖拽操作的一个接口。
它本身继承Tool,tool是gef典型的Selection层的产物,从业务流程上来讲。用户操作的第一部就是选中什么节点,然后发送什么请求,再就是得到什么相应。这对应的便是gef的tools,request,policies。
DragTracker控制的是选中后做拖拽相关操作的接口。几乎所有跟拖拽相关的操作,都继承自这个接口。
以下是它的实现类:
ConnectionDragCreationTool
ConnectionEndpointTracker
MarqueeDragTracker
SelectEditPartTracker
DeselectAllTracker
DragEditPartsTracker
DragTreeItemsTracker
SingleSelectionTracker
SimpleDragTracker
ResizeTracker
RulerDragTracker
上述实现类,我也没有仔细看,我只是关注了一下DragEditPartsTracker,因为这个是跟gef图形界面拖拽相关的实现类。
在AbstractGraphicalEditPart类里面有一个getDragTracker(Request request)方法,用于获取DragTracker对象。默认情况下它是直接new了一个DragEditPartsTracker对象。
public DragTracker getDragTracker(Request request) {
return new org.eclipse.gef.tools.DragEditPartsTracker(this);
}
这个方法的有点在于,它是直接new了一个DragTracker,这说明我们想要重新实现一个自己的DragTracker是一件很容易的事情。
下面是一个例子:如果实现了这个代码,policies里面接受到的会是Move请求
@Override
public DragTracker getDragTracker(Request request)
{
return new org.eclipse.gef.tools.DragEditPartsTracker(this){
/* (non-Javadoc)
* @see org.eclipse.gef.tools.DragEditPartsTracker#isMove()
*/
@Override
protected boolean isMove()
{
return true;
}
};
}
重写XYLayoutEditPolicy里面的方法,对组件进行特殊处理。
@Override
protected Command getChangeConstraintCommand(
ChangeBoundsRequest request)
{
request.getEditParts().clear();
request.setEditParts(getHost());
return getHost().getParent().getCommand(request);
}
分享到:
相关推荐
用JQuery写的拖动元素进行排序的方法,包含拖动排序、拖动移除、拖动添加。 代码完整可用。没有用到第三方插件,自主可控。 原理是用CSS中position定位来跟踪鼠标移动,就是让元素跟踪鼠标位置,然后判断其在页面...
c# 拖拽效果 拖拽控件c# 拖拽效果 拖拽控件c# 拖拽效果 拖拽控件c# 拖拽效果 拖拽控件
Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题),大屏项目显示云南省3D的地图,可拖拽缩放、地图打点、点击图标弹框等等功能。 ## 使用 - 启动调试服务: `npm start` - 构建 dist: `npm run ...
videojs视频可拖动播放与不可拖动播放
C#实现图像拖拽、锚点缩放(以鼠标所指位置为中心缩放)。 原创代码,引用请注明出处。
双向拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽...
Unity 从UI中拖拽对象放置并拖动效果
今天小编就为大家分享一篇关于易语言设置拖动滚动条的位置是否允许拖动跟踪的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
今天用vue+原生js的mousemove事件,写了个拖动,发现只能慢慢拖动才行,鼠标只要移动快了,就失效,不能拖动了; 搞了半天在,总算解决了,但是问题的深层原理还没搞清楚,知道的大侠可以留言分享,下面直接上代码:...
这个项目可以从多个控件拖拽,并且拖拽过程中显示的影子可以设置各种颜色,位置都是可以的,拖拽的对象包括文本、下拉框、列表等,要研究winform下的控件拖拽功能的朋友可以看看,说明是VB.NET+Winform,不需要的朋友...
拖拽的清单demo可以随意拖动板块 拖拽的清单demo可以随意拖动板块
4.有插入位置跟踪标线标志。 5.有鼠标选中拖拽过程中的截图效果。 6.通过MousePressed、MouseMoved、MouseReleased实现。 7.目标人群:想学习使用MousePressed、MouseMoved、MouseReleased实现拖拽功能、QListWidget...
关键点有:单个组件拖动,一行多列里面的组件拖动, 单个组件可以拖入一行多列里, 单个组件的拖动好实现,关键是把一个组件拖动到另一个类似于表格里面,而且有的情况下还需要限制拖动只能在水平方向
RecycleView实现内部拖拽排序和两个RecycleView拖拽对调条目的Demo
WPF DataGrid 拖拽实现
实现了元素的拖拽功能,手机端网页也可以用,同时还具有拖动目标元素的同时拖动其他元素
主要介绍了Java实现拖拽列表项的排序功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
在Unity里面实现UI窗口的操作,包含拖动,单边拖动缩放,对角拖拽缩放功能
c# datagridview 经典行拖拽
html5移动端拖拽图片、拖拽标签等插件以及相应的demo、适用于手机网址开发和mui前端开发、h5app开发中的图片拖拽、div拖拽等