拖放Eclipse Workbench标签 - 编程入门网
c void dragFinished(DragSourceEvent dsEvent) { }
});
此处另外一个非常重要的假设是:CTabFolder 容器并没有已经创建好的拖放源。否则,代码 DragSource dragSource = new DragSource(tabFolder, operations); 就会触发一个 SWTError 错误,这是因为我们不能为同一个控件创建多个拖放源。 要查看这种假设是否有效(这也是 清单 1 的一个可能用途),让我们来看一下与这个编辑器标签有关的默认拖放行为。默认的行为提示说存放这个编辑器标签的 CTabFolder 容器可能早已为其创建了一个拖放源。然而,快速查看 org.eclipse.swt.custom.CTabFolder.java 的代码可以看到,CTabFolder 的默认拖放操作都不是通过创建一个拖放源来实现的,而是通过为 SWT.DragDetect、SWT.MouseMove 和 SWT.MouseUp 类型的事件添加监听程序来实现的。CTabFolder 容器还没有创建拖放源的假设仍然有效,正如我们可以看到的一样,这是基于查看非 API 内部类获得的信息而作出的假设。因此,如果这种假设在将来的版本中无效,也不用感到惊奇;不过我认为这种可能性非常小。 下面让我们来看一下如何捕获存放编辑器的 CTabFolder 容器。通过对编辑器平铺行为的观察,我们注意到不管在何时平铺显示编辑器,都会创建一个新的 Tab 文件夹。另外,当一个标签组中的所有编辑器全部关闭或被移动到一个不同的 Tab 文件夹上时,原来的 Tab 文件夹就会被销毁。这意味着 CTabFolder 容器的创建和销毁都是动态的,因此 CTabFolder 容器的拖放源的创建也应该是动态完成的。 要实现这种功能,需要能够对 CTabFolder 容器的创建进行控制。但是 Eclipse 并没有提供任何可以在创建 CTabFolder 容器时进行回调的功能。另外一种方法是对 CTabFolders 进行特殊化 (specialize) 处理(继承),继承这些 specialized CTabFolders(继承类,而不是基类 CTabFolder),并在这些 specialized CTabFolders 的 constructors 中创建拖放源。然而,在 Eclipse 中实例化这些 specialized CTabFolders 是一项非常繁杂的任务,因此我们需要寻找一种新的解决方案。 拖放Eclipse Workbench标签(3)时间:2011-01-11 IBM Shiva Kumar一种创建拖放源的新方法 下面让我们为 Display 添加一个拖放检测监听器(用来监听 SWT.DragDetect 类型的事件),如下所示: 清单 2. 为 Display 添加拖放监听器
不论何时发生拖放操作时,都会调用这个监听器的 handleEvent() 方法,其中 event.widget 指向产生这个事件的控件。在拖动编辑器标签时,event.widget 指向存放这个拖放编辑器标签的 CTabFolder 容器。这样我们现在就可以为这个 CTabFolder 容器创建一个拖放源,如下所示: 清单 3. 捕获存放编辑器的 Tab 文件夹
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |