拖放 Eclipse Workbench 标签

http://tech.ddvip.com   2006年11月20日    社区交流

本文详细介绍拖放 Eclipse Workbench 标签

  为了寻找答案,首先让我们来了解一下 Eclipse 的事件分发行为。

  当控件上产生某种类型的事件时,首先将是那些为相同事件类型注册的 Display 的所有过滤器 收到发生该事件的通知(使用 Display.addFilter() 方法添加的监听器),接收顺序是过滤器在 Display 上的注册顺序。然后发生该事件的通知会发送给控件中为该事件类型注册的所有监听器,发送顺序是这些监听器在控件上的注册顺序。

  例如,假设 Listener 1 是在某个控件上为 t1 类型的事件注册的第一个监听器,而 Listener 2 是在这个控件上为相同的 t1 类型的事件注册的第二个监听器。另外假设 Filter 1 是在 Display 上为相同的 t1 类型的事件注册的过滤器。现在,当这个控件上产生一个 t1 类型的事件时,第一个接收到发生该事件的通知的是 Filter 1,然后是 Listener 1,最后是 Listener 2。

  在这种新方法中,我们给 Display 为 SWT.DragDetect 类型的事件添加了一个 filter。默认拖放行为与编辑器标签有关,这意味着要对编辑器重新进行排列和平铺,说明 CTabFolder 存在多个拖放检测监听器。因此,我们有一个 filter 和多个与 CTabFolder 有关的 default-listeners,它们都要监听 SWT.DragDetect 事件。

  当我们拖动一个编辑器标签时,filter 会第一个接收到这种拖动操作。在 filter 的 handleEvent() 方法中,我们正在创建一个 drag source,并为这个 drag-source 添加了一个 DragSourceListener。然后,它会向父 CTabFolder 容器注册了另外一个拖放检测监听器,我们称之为 drag-listener-x。因此,当程序控制返回 filter 的 handleEvent() 方法时,就会有一组 default-listeners 和 drag-listener-x 在等待接收拖动事件的通知。在通知 default set of listeners 之后,新注册的 drag-listener-x 也会接收到拖放事件的通知,这样就可以实现我们的目的了。

来源:IBM    作者:Shiva Kumar H.R.    责编:豆豆技术应用

正在加载评论...