javaGUI学习33:AWT-拖放技术

1、java.awt.dnd软件包

提供拖操作源,放操作目的地,拖操作意图识别器,以及相关事件与监听者类。

java.awt. dnd 软件包中的类一般分为3种,分别为识别器、拖动源以及放置目标。

其中,拖动源与放置目标又分别由一组事件类型与监听者组成。

另外,拖动源与放置目标都拥有–个环境对象,它为放置目标同位体保持拖动源的状态。

2、拖动源与放置目标
  • 拖动源与放置目标是支持拖放操作中的基本块。
  • 拖动源由DragSource类描述,它利用DragSource.startDrag方法启动一个拖动操作。
  • 放置目标则由Drop Target类描述,它是利用Droplarget . drop方法放置操作对象的目的地。
  • 拖放操作都是由意图启动的。通常,表达意图时需要将鼠标拖动到拖动源边界的外部。但是,意图是与窗口系统相关的一种操作。
  • java. awt.drd软件包中提供的 DragGestureRecognizer类可用于检测拖动意图,而DragCestureRecognizer类实例则可从拖动源中获得。
  • 识别器通知拖动意图监听者,一个拖动意图事件发生在相关拖动源中。拖动意图监听者接收到该事件后,可以利用DragSource .startDrag ()方法启动拖动操作。
拖放操作步骤:
只要时刻牢记拖放操作的3个主要组成部分:拖动源、放置目标以及拖动意图监听者,则拖放操作的实现相当简单:
1)产生待使用的DragSource、DropTarget以及 DragGestureRecognizer实例。
2)分别实现如上所述各个实例的监听者:DragSourceListener、DropTargetListener以及DragCcstureRecognizerListener。其中,DragSourceListener一般利用DragSource.star-tDrag ()方法启拖动操作;DroplargetListener 用于监视放置操作的状态;DragCesture-RecognizerListener则用于接受或拒绝拖动操作并完成放置操作。
2.1 拖动意图

检测拖动源的拖动意图是DragSourceRecognizer方法的工作。拖动意图识别器是单一预测(unicast)事件源,当相关拖动源中产生一个拖动意图时,则本地同位体通知拖动意图识别器。然后,意图识别器通知实现DragGestureListener接口的监听者。

2.2 拖动源

拖动源启动拖动操作,并创建拖动意图识别器。一般利用如下方式使用拖动源:

  • 利用无参数DragSource构造器创建一个DragSource实例。

  • 从拖动源中获取 DragGestureRecognizer实例。

  • 当检测到拖动意图时,调用DragSource .startDrag ()方法。

2.3 放置目标

与拖动源相似,放置目标是一个意图的目标。典型的放置意图由在与放置目标相关的构件内释放鼠标组成。同时,与拖动源相同,放置意图的定义也与窗口系统相关。
与拖动源相比较,放置目标实际上更像拖动意图识别器。放置目标与识别器都是单一预测事件源;每个放置目标都拥有唯一一个Drop’TargetListener类型的放置目标监听者。
另外,创建放置目标时涉及的相关对象包括放置目标、构件以及放置目标监听者。在初始化 Drop’Target 的实例后,如果在构件中检测到放置意图,则每个对象都将被通知开始执行相应的动作。与DragGestureRecognizer实例相似,实际上识别器与放置目标在初始化后,一般都很少再次使用。

2.4 事件

提供了传递到上面三个Listener方法的事件,一组事件类。

拖动意图事件可以启动拖动操作,因此当检测到某个拖动意图后,你不必直接访问拖动源。

另外,DragGestureEvent实例被传递到DragSource.startDrag ()方法与DragGestureListener. dra-gCestureRecognized ()方法。

2.5 DragSourceDragEvent与DragSourceDrogEvent

DragSourceDragEvent 与 DragSourceDropEvent实例被传递到 DragSourceListener 接口定义的方法中。DragSourceDragEvent与DragSourceDropEvent分别与放置目标中发生的拖动事件和放置事件相关。

2.6 DropTargetDragEvent与DropTargetDropEvent

DropTargetDragEvent与DropTargetDropEvent实例被传递到 DropTargetListener 接口定义的公共方法。DropTlargetDragEvent与 DropTargetDropEvent分别与放置目标中发生的拖动事件和放置事件相关。

2.7 自动滚动

自动滚动是指当将拖动鼠标放置在某一偏差范围内时,放置目标可以自动实现内容的滚动显示。例如:Windows Explorer中,位于左侧框中的树行控制结构即是一个自动滚动的放置目标。如果将某个项目拖动到树形结构中,并将鼠标放置在顶部或底部附近,则树会向鼠标方向滚动。
自动滚动目标是利用java. awt . dnd.Autoscroll接口实现的,这个接口定义了两个方法:

public Insets getAutoscrollInsets ()
public void autoscroll (Point)

其中,getAutoscrollInsets方法用于确定拖动鼠标的位置是否应该引发自动滚动操作。如果要引发自动滚动操作,则只要鼠标保留在自动滚动偏差区域内,就周期性地激活autoscroll ()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值