首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

Eclipse 插件开发——远离厌恶的ESC

2012-09-09 
Eclipse 插件开发——远离讨厌的ESC??问题描述:??????? 在Eclipse插件开发过程中,都会涉及到“弹出对话框”的

Eclipse 插件开发——远离讨厌的ESC

?

?问题描述:

?

?????? 在Eclipse插件开发过程中,都会涉及到“弹出对话框”的问题,今天偶然发现了一个现象:弹出的对话框打开后,再按ESC键,对话框自动就关闭了。后来发现在Eclipse中也是一样的。比如创建一个类的时候,弹出对话框以后按ESC,对话框就直接关闭了。这样设计主要是为了方便用户,可是当我们不需要这样的效果的时候,应该怎么做呢?

?

问题分析:

?????? 在Eclipse中,在键盘上按下的每一个键,都会触发相应的事件,Eclipse拦截到事件后,再进行后续的处理。再回到我们上面提到的问题:?既然对话框是在按ESC键后关闭的,那我们很自然的想到:如果能够屏蔽按下ESC键触发的事件,对话框应该就不会关闭了。?????

?

解决方案:

?????经过上面的分析,问题已经清楚了:为了解决这个问题,我们需要搞定下面的两件事儿:

???? 1、找到按ESC时触发的事件;

???? 2、拦截这个事件,不让事件生效(相当于用户没按ESC)。

???? 感谢万能的Google大神,我们找到了这个接口:TraverseListener。上源码:

????

public void keyTraversed(TraverseEvent e) {     if(e.detail == SWT.TRAVERSE_ESCAPE){         e.doit = false;     } }

?

?

???根据detai可以判断出来按下的是ESC,然后将doti设定为false就可以了。

???拦截ESC的代码已经有了,还剩最后一个问题:监听器只有注册了之后才能生效,那这个监听器我们在哪里注册呢?

???还是看源码,在面板类Composite以及Shell中,提供了接口addTraverseListener,通过这个借口,我们就可以注册监听器了。

?

总结:

????1、在创建页面的时候,我们可以在将监听器注册到根面板(root composite)中;

??? 2、如果页面是通过继承Dialog类来实现,可以在createDialogArea方法中注册监听;

??? 3、如果页面作为向导页(继承WizardPage),可以在createControl方法中注册监听。

???

热点排行