`
lggege
  • 浏览: 372746 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SWT 添加全局的监听

    博客分类:
  • RCP
阅读更多

Display 有这么一个方法:

 

public void addFilter (int eventType, Listener listener)

 

具体使用代码:

       Display.getDefault().addFilter(SWT.KeyDown, new Listener() {

           public void handleEvent(Event e) {

              if ((e.stateMask == SWT.CTRL) && (e.keyCode == 'a')) {

                  System.out.println("XXXX");

              }

           }

       });

上面的代码给Display添加一个Filter, 这个Filter监听Ctrl+a事件.

 

 

也就是给Display添加一个全局的监听.比如:上面的就是快捷键Ctrl+a.

这个Display的Filter很强大, 无论当前焦点在哪个控件上,都可以监听这个Ctrl+a的事件.

 

如果界面中还有其他的控件也监听这个快捷键的话, 那么这个Display中的监听会比其他控件的监听先执行.

 

正由于Display的Filter比其他的监听先执行, 所以, 还更强大的功能就是: 你可以在handleEvent中阻拦event的向下传递[通知其他的监听者], 或者, 任意修改event的属性.

 

正由于Display的Filter这么强大和危险,慎用!

分享到:
评论
8 楼 heshifk 2015-11-02  
我今天用这个也遇到了一个问题,当焦点在别的组件上面,也添加了快捷键,点击别的快捷键,执行完之后会自己执行焦点对应的组件
7 楼 wuzijingaip 2011-12-06  
不是系统热键啊!!!
6 楼 foohsinglong 2010-12-07  
为什么我一定要在eclipse里面才能用?要把界面话出来吗?
5 楼 lggege 2009-06-04  
注意:
    由于是添加到Display的监听, 一定要记得removeFilter.
4 楼 shijiyu 2009-04-10  
但是 如果把焦点从这个Display移开的话好像就监听不到了也 我觉得这个与系统热键有点关系
3 楼 xykpermit 2008-12-12  
。。。
“正由于Display的Filter这么强大和危险,慎用!”,这行字好小,就像香烟盒上的“吸烟有害健康”一样。。。。
非常感谢lggege
2 楼 zhangcheng 2008-12-12  
我也学到东西了
1 楼 lformat 2008-12-03  
不错,又学到东西了

相关推荐

Global site tag (gtag.js) - Google Analytics