双击lumaqq
lumaqq 时间:2021-02-26 阅读:(
)
版权所有IBM公司2008商标基于JFaceTextFramework构建全功能代码编辑器:第3部分第1页,共7基于JFaceTextFramework构建全功能代码编辑器:第3部分DoubleClick和TripleClick马若劼(maruojie@cn.
ibm.
com)软件工程师IBM中国软件开发中心2008年3月27日DoubleClick(双击)和TripleClick(三击)是方便用户选择文本(当然不一定非得是选择文本)的辅助功能.
本文介绍在JTF里面如何自定义双击行为,以及如何为JTF添加三击支持.
查看本系列更多内容DoubleClick(双击)和TripleClick(三击)是方便用户选择文本(当然不一定非得是选择文本)的辅助功能.
本文介绍在JTF里面如何自定义双击行为,以及如何为JTF添加三击支持.
DoubleClick在Eclipse的Java编辑器中,用户用鼠标在编辑区域双击时,可以看到双击处的单词会被选中,这就是JTF的DoubleClick(双击)特性.
双击时触发的动作是可以自定义的,不一定非要选择一段文本.
与双击相关的接口是ITextDoubleClickStrategy,它只有一个方法叫做doubleClicked,只要实现这个接口就可以了,在例子中,我添加了ExprDoubleClickStrategy类:清单1.
ExprDoubleClickStrategy实现了ITextDoubleClickStrategy接口publicclassExprDoubleClickStrategyimplementsITextDoubleClickStrategy{publicvoiddoubleClicked(ITextViewerviewer){//getdocIDocumentdoc=viewer.
getDocument();//gettokenlistTokenListtokenList=TokenManager.
getTokenList(doc);//getdoubleclickpositionintoffset=viewer.
getSelectedRange().
x;//gettokeninthatoffsetCommonTokentoken=tokenList.
getToken(offset);//selectwholetokeniftokenisnotnulldeveloperWorksibm.
com/developerWorks/cn/基于JFaceTextFramework构建全功能代码编辑器:第3部分第2页,共7if(token!
=null&&token.
getType()!
=Token.
EOF){//selectdoubleclickedtokenviewer.
setSelectedRange(token.
getStartIndex(),token.
getStopIndex()-token.
getStartIndex()+1);}}}这个流程非常直接,得到被点击的位置,通过位置得到相应的符号,然后选择整个符号.
我们再次利用了TokenList来得到指定字符偏移处的符号.
和本系列第二部分一样,有了实现还得让JTF知道你的实现,我们再来修改ExprConfiguation,覆盖一个getDoubleClickStrategy方法:清单2.
让JTF知道你的DoubleClick实现publicITextDoubleClickStrategygetDoubleClickStrategy(ISourceViewersourceViewer,StringcontentType){returnnewExprDoubleClickStrategy();}只是简单的返回我们实现的ITextDoubleClickStrategy而已,这样JTF就知道我们的双击行为了,注意双击行为也是和文本类型绑定到一起的,但是我们只有一种类型,所以没有利用这个信息.
读者可以尝试本文的例子,双击某个变量,看看是否这个变量被全部选中了.
TripleClick有了双击,可能自然就会想到三击.
但是JTF本身是不支持三击行为的.
我们需要自己实现,只要模仿双击的机制来做就可以了.
接口模仿双击的处理方式,我们也添加一个ITextTripleClickStrategy接口,如下所示:清单3.
模仿DoubleClick,创建ITextTripleClickStrategy接口publicinterfaceITextTripleClickStrategy{/***Invokedwhentripleclickingdetected*/publicvoidtripleClicked(ITextViewerviewer);}然后我定义了ExprTripleClickStrategy,它实现了ITextTripleClickStrategy接口.
为了简单起见,我不添加具体代码了,只是显示一个对话框表示三击事件被我们捕捉到了.
三击的时候具体做什么,读者有兴趣可以自己完成.
配置下一步就是让JTF知道我们的三击策略,不过SourceViewerConfiguration没有和三击有关的方法,我们可以模仿getDoubleClickStrategy的形式添加一个getTripleClickStrategy方法,然后修改ibm.
com/developerWorks/cn/developerWorks基于JFaceTextFramework构建全功能代码编辑器:第3部分第3页,共7ExprViewer的configure方法,把三击策略安装上去.
其实就是一个哈希表,里面把文本类型和三击策略映射了起来.
这些代码都是模仿SourceViewer中对双击策略的处理方式写的,所以就不一一列举了.
事件的触发最后的一步是触发三击事件,不然你装多少个三击策略也没用.
从原理上说,三击事件就是鼠标双击之后又点了一下,我们可以监听双击事件,然后在下一次鼠标单击时检查其和双击事件的时间间隔,如果小于一个阈值,就触发三击事件.
所以为了触发三击事件,我们需要给ExprViewer安装一个鼠标事件监听器:清单4.
给ExprViewer添加三击事件触发机制//HowlongwecanwaitfortripleclickafterdoubleclickpublicstaticfinallongTRIPLE_CLICK_THRESHOLD=500;privateclassTripleClickStrategyConnectorextendsMouseAdapter{privatelongdoubleClickTime;publicTripleClickStrategyConnector(){doubleClickTime=0;}@OverridepublicvoidmouseDoubleClick(MouseEvente){doubleClickTime=System.
currentTimeMillis();}@OverridepublicvoidmouseDown(MouseEvente){//comparetimeintervalwiththresholdif(System.
currentTimeMillis()-doubleClickTimeLumaQQ的创立者版权所有IBM公司2008(www.
ibm.
com/legal/copytrade.
shtml)商标(www.
ibm.
com/developerworks/cn/ibm/trademarks/)
Megalayer是新晋崛起的国外服务器商,成立于2019年,一直都处于稳定发展的状态,机房目前有美国机房,香港机房,菲律宾机房。其中圣何塞包括CN2或者国际线路,Megalayer商家提供了一些VPS特价套餐,譬如15M带宽CN2线路主机最低每月48元起,基于KVM架构,支持windows或者Linux操作系统。。Megalayer技术团队行业经验丰富,分别来自于蓝汛、IBM等知名企业。Mega...
物语云计算怎么样?物语云计算(MonogatariCloud)是一家成立于2016年的老牌国人商家,主营国内游戏高防独服业务,拥有多家机房资源,产品质量过硬,颇有一定口碑。本次带来的是特惠活动为美国洛杉矶Cera机房的不限流量大带宽VPS,去程直连回程4837,支持免费安装Windows系统。值得注意的是,物语云采用的虚拟化技术为Hyper-v,因此并不会超售超开。一、物语云官网点击此处进入物语云...
阿里云国际版注册认证教程-免绑卡-免实名买服务器安全、便宜、可靠、良心,支持人民币充值,提供代理折扣简介SunthyCloud成立于2015年,是阿里云国际版正规战略级渠道商,也是阿里云国际版最大的分销商,专业为全球企业客户提供阿里云国际版开户注册、认证、充值等服务,通过SunthyCloud开通阿里云国际版只需要一个邮箱,不需要PayPal信用卡就可以帮你开通、充值、新购、续费阿里云国际版,服务...
lumaqq为你推荐
伪装微信地理位置微信和微信伪装地理位置打不开怎么办?一点就一闪就完了渗透测试软件测试与渗透测试那个工作有前途iphone越狱后怎么恢复苹果越狱后怎么恢复出厂设置godaddygodaddy域名怎样使用电子商务网站模板做电子商务网站用什么cms或者模版比较好?blogcn南京明城墙(太平门一带某些地区)的城砖上为什么会有一些小洞(每块砖两个洞洞……)?网络虚拟机虚拟机网络怎么连接域名库域名赎回期过了多长时间可以注册网站排名靠前怎样才能做好一个网站?让网站排名靠前?新手求解去鼠标加速度CS去鼠标加速度和鼠标灵敏度的区别?
安徽双线服务器租用 如何注销域名备案 独享100m sub-process 512m内存 发包服务器 个人免费空间 好看qq空间 免费网站申请 vip购优汇 admit的用法 工作站服务器 ntfs格式分区 天翼云盘 酷番云 支持外链的相册 申请免费空间和域名 cxz 国内空间 windowsserver2012r2 更多