WEB开发网
开发学院软件开发Java 基于 JFace Text Framework 构建全功能代码编辑器... 阅读

基于 JFace Text Framework 构建全功能代码编辑器: 第 3 部分:Double Click 和 Triple Click

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 配置下一步就是让 JTF 知道我们的三击策略,不过 SourceViewerConfiguration 没有和三击有关的方法,基于 JFace Text Framework 构建全功能代码编辑器: 第 3 部分:Double Click 和 Triple Click(3),我们可以模仿 getD

配置

下一步就是让 JTF 知道我们的三击策略,不过 SourceViewerConfiguration 没有和三击有关的方法,我们可以模仿 getDoubleClickStrategy 的形式添加一个 getTripleClickStrategy 方法,然后修改 ExprViewer 的 configure 方法,把三击策略安装上去。其实就是一个哈希表,里面把文本类型和三击策略映射了起来。这些代码都是模仿 SourceViewer 中对双击策略的处理方式写的,所以就不一一列举了。

事件的触发

最后的一步是触发三击事件,不然你装多少个三击策略也没用。从原理上说,三击事件就是鼠标双击之后又点了一下,我们可以监听双击事件,然后在下一次鼠标单击时检查其和双击事件的时间间隔,如果小于一个阈值,就触发三击事件。所以为了触发三击事件,我们需要给 ExprViewer 安装一个鼠标事件监听器:

清单4. 给 ExprViewer 添加三击事件触发机制

   // How long we can wait for triple click after double click 
public static final long TRIPLE_CLICK_THRESHOLD = 500; 
 
private class TripleClickStrategyConnector extends MouseAdapter { 
 private long doubleClickTime; 
 
 public TripleClickStrategyConnector() { 
 doubleClickTime = 0; 
 } 
 
 @Override 
 public void mouseDoubleClick(MouseEvent e) { 
 doubleClickTime = System.currentTimeMillis(); 
 } 
 
 @Override 
public void mouseDown(MouseEvent e) { 
 // compare time interval with threshold 
 if (System.currentTimeMillis() - doubleClickTime <= TRIPLE_CLICK_THRESHOLD) { 
 ITextTripleClickStrategy strategy = (ITextTripleClickStrategy) selectContentTypePlugin( 
  getSelectedRange().x, tripleClickStrategies); 
  if (strategy != null) { 
  strategy.tripleClicked(ExprViewer.this); 
  } 
 } 
 
 // clear double click time to avoid trigger triple click more than once 
 doubleClickTime = 0; 
 } 
} 

上面的代码实现了我所描述的逻辑,如果检测到三击事件,我们通知 ITextTripleClickStrategy。

到这里为止,我们的三击流程就跑完了。当然不止是三击,四击五击以至 N 击,就都可以这样实现了。

结束语

运行本文的例子之后会发现,三击后对话框确实出来了,但是文本选择区域发生了变化。这是因为 StyledText 内部做了一些事情,处理了我们的鼠标事件,如果完整的实现 ITextTripleClickStrategy 接口并设置我们想要的选择范围,这样的情况就不会出现了。至于三击之后可以做什么,我可以提供一个建议:以语句”abcde = 12345;”为例,双击 abcde 会选中 abcde,三击 abcde 则可以选中这条语句,即到分号为止的地方。我们可以从三击位置做一个扫描,直到前后碰到分号为止,有兴趣的读者可以尝试完善这个功能。

本文示例源代码或素材下载

上一页  1 2 3 

Tags:基于 JFace Text

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接