v
工作台首选项允许用户指定单击或双击时视图是否应打开它们的对象。
为什么关于此首选项的弃权声明并不适用于所有的视图? 因为插件添加的视图在它们的实现中必须显式支持此首选项。
记住,可以通过创建 SWT 控件和编写标准 SWT 代码来实现视图, 或通过使用 JFace 查看器来处理低级别的细节。 可在任一级别作到享有单击首选项。 打开其它对象的大部分视图在结构化的类似列表的视图中显示它们。 现在我们将重点放在这种视图上。如果您的视图以不同的方式显示对象, 则您可能使用 SWT 级别概念来支持单击。
如果在使用 JFace 面向列表的查看器来表示对象, 则对单击的支持是直接的。使用 addOpenListener 而不是 addDoubleClickListener 来触发在视图中打开各项。 打开侦听器支持当前工作台首选项,在指定的鼠标事件发生时激发打开事件。
对于非打开操作(如在树中双击展开各项),您可能仍想使用 addDoubleClickListener。
JFace 提供实用程序类 OpenStrategy 来处理 SWT 控件级别的单击和双击的流程部署。OpenStrategy 是由工作台首选项对话框配置的,所以它支持当前工作台打开首选项。实际上,JFace 查看器使用此类来实现打开侦听器。
必须创建 OpenStrategy 并将其与 SWT 控件相关联。OpenStrategy 将 hook 相应的事件并根据用户首选项解释它们。您的工作就是向实现用于打开的代码的策略添加打开侦听器。这样,您就不需要知道哪个小窗口事件触发了打开事件。
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() 来确定缺省情况下是否应激活打开的编辑器。 激活编辑器将把焦点从视图切换至编辑器,在单击方式中, 这尤其容易混淆并产生不期望的后果。