常规首选项允许用户指定单击或双击时视图是否应打开它们的对象。
为什么关于此首选项的免责声明并不适用于所有的视图?因为插件添加的视图在它们的实现中必须显式支持此首选项。
记住,可以通过创建 SWT 控件和编写标准 SWT 代码来实现视图,也可以通过使用 JFace 查看器来处理低级详细信息来实现视图。可以在任一级别采用单击首选项。打开其它对象的大多数视图在类似于列表的结构化视图中提供它们。我们现在将主要描述该种视图。如果您的视图以另一种方式显示对象,则您可能将使用 SWT 级别的概念来支持单击。
如果在使用 JFace 面向列表的查看器来表示对象,则对单击的支持是直接的。使用 addOpenListener 而不是 addDoubleClickListener 来触发在视图中打开各项。打开侦听器采用当前工作台首选项,在指定的鼠标事件发生时激发打开事件。
对于非打开操作(例如,在树中双击展开各项),您可能仍想使用 addDoubleClickListener。
JFace 提供实用程序类 OpenStrategy 来处理 SWT 控件级别的单击和双击的流程部署。OpenStrategy 是由工作台首选项对话框配置的,所以它采用当前工作台打开首选项。实际上,JFace 查看器使用此类来实现打开侦听器。
必须创建 OpenStrategy 并使它与 SWT 控件相关联。OpenStrategy 将挂接适当的事件,并根据用户首选项来解释它们。您的任务是将开放式侦听器添加至实现开放式代码的策略。这样,您就无需了解是哪个窗口小部件事件触发了打开的事件。
OpenStrategy openHandler = new OpenStrategy(control); openHandler.addOpenListener(new IOpenEventListener() { public void handleOpen(SelectionEvent e) { // code to handle the open event. ... } }
打开的其它工作台首选项(在悬浮式帮助上进行选择,使用方向键打开)也是由 OpenStrategy 处理的。这意味着如果使用 JFace 查看器或 OpenStrategy 类来实现打开行为,则将发生“相应的操作”。
处理打开事件时,应使用 OpenStrategy.activateOnOpen() 来确定缺省情况下是否应激活打开的编辑器。激活编辑器将把焦点从视图切换至编辑器,在单击方式中,这尤其容易混淆并产生不期望的后果。