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#环境中实现图像的拖拽以及锚点缩放,以鼠标所指位置为中心进行缩放。 首先,我们需要理解图像拖拽的基本原理。在...
要实现"拖拽元素到指定的对应位置",我们需要在`.droppable()`的`drop`回调函数中处理逻辑。当拖动元素被释放时,可以根据需要调整其位置,例如将其插入到目标元素的特定子元素后面,或者改变其CSS样式以适应新位置...
本Demo主要演示了如何在`RecycleView`中实现内部条目的拖拽排序以及两个`RecycleView`之间条目的互换功能,这对于创建动态且交互性强的用户界面非常有用。 1. **RecycleView基本概念**: `RecycleView`的核心思想...
在Unity游戏引擎中,创建一个从用户界面(UI)中拖拽对象并实现平滑放置与拖动的效果是一项常见的交互设计。这个过程涉及到多个关键的技术点,包括UI元素的设置、碰撞检测、C#脚本编写以及物体的动态更新。下面我们将...
在网页开发中,"拖拽+拖拽改变div大小"是一种常见的交互设计,它允许用户通过鼠标拖动来调整div元素的尺寸。这种功能在创建可定制的布局、图形编辑工具或者任何需要用户自定义区域大小的应用中非常有用。本文将深入...
2. **全局变量**:`iMouseDown`, `dragObject`等全局变量用于跟踪拖拽状态。`iMouseDown`表示鼠标是否按下,`dragObject`存储当前被拖动的元素。 3. **获取鼠标位置**:`getMouseOffset`, `getPosition`, `...
此外,这样的组件通常还支持自定义事件监听,如拖动开始、拖动中和拖动结束,开发者可以据此编写逻辑,实现更多高级功能,如实时保存更新的任务信息到数据库。 总之,这个基于Vue.js的可拖拽甘特图组件提供了一种...
在C#编程中,实现控件的拖动和拖拽效果是常见的需求,尤其是在开发桌面应用程序时。拖动效果和拖拽控件的功能使得用户能够更直观、方便地与界面进行交互。以下将详细讲解如何在C#中实现这一功能。 首先,我们需要...
本示例涉及的主题是“js控制多个div拖拽和拖动、且能保存数据至cookie、数据库、xml”,这是一项实用技术,尤其适用于创建交互性强的Web 2.0应用程序。下面将详细介绍这一主题的相关知识点。 首先,让我们了解...
在Web开发中,实现拖拽功能的时间轴可以提供用户友好的交互体验,让用户能够自由地移动时间点或区间,以查看不同的时间段。下面将详细讨论如何创建一个支持拖拽功能的时间轴以及相关的技术要点。 首先,我们需要...
videojs视频可拖动播放与不可拖动播放
在这个特定的场景中,`bootstrap-table.css`可能包含了拖拽排序的样式规则,如拖动行时的高亮效果、悬浮指示器等,使得交互过程更加直观。 接着,`jquery.tablednd.js`是基于jQuery的TableDnD库,实现了表格行的...
为了实现拖动功能,我们需要在拖动开始、拖动中以及拖动结束时分别进行处理: 1. **拖动开始**:当用户开始拖动列头时,记录当前被拖动列的位置和鼠标起始位置。Vue 提供了事件修饰符 `.stop` 和 `.prevent` 可以...
双向拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽树拖拽...
本文将深入探讨如何在WPF DataGrid中实现行的拖拽功能。 首先,我们需要理解WPF DataGrid的基础结构。DataGrid由一系列行组成,每行又包含多个单元格,这些单元格对应于数据源中的字段。数据绑定是实现这一功能的...
在某些应用中,用户可能需要能够交互地调整数据行的顺序,例如通过拖动来交换行的位置。这个功能可以增强用户界面的易用性和交互性。在本篇文章中,我们将深入探讨如何实现“c#.net datagridview内部行拖动,也就是...
标题“unity ugui拖拽限定范围”就涉及到这个关键点,即如何确保在UGI界面中,拖动的物体只在设定的区域内移动。 要实现这个功能,我们可以利用Unity的EventSystem和Input模块,结合RectTransform组件来检测和限制...
在QT编程中,创建一个可拖拽排序的表格是一项实用且常见的需求,尤其适用于需要用户自定义顺序的数据展示。本文将深入探讨如何利用QT库来实现这一功能,并结合描述中的"QT实现可拖拽行排序的表格"进行详细讲解。 ...