Feeling

    三人行,必有我师焉

   ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  85 随笔 :: 0 文章 :: 392 评论 :: 0 Trackbacks
自定义控件通常是从一个Composite或者Canvas继承而来,但是缺省状态下,这两个控件都无法通过键盘的Tab键得到焦点。通过对SWT的debug,我发现要实现该事件,必须满足一个必要条件:为自定义控件安装一个KeyEvent的监听器

实际上我个人认为这出自于SWT的实现者自己的考虑,可能认为如果没有KeyListener,也就意味着没有Key的操作,那么也无需通知Travserse事件,Travserse事件的前提就是Key操作。但是在某些特定情况下我们不需要KeyListener,也可以模拟出KeyEvent的效果,比如通过TraverseListener的keyTraversed方法。总而言之,想通过键盘为某一个自定义控件获取焦点,就老老实实的给控件加一个KeyListener吧。

此处附加一些和Traverse相关的小知识:

1、如何通过键盘的Tab键跳出 Multiple Style 的Text?
        请使用 Ctrl+Tab 组合键。

2、如何通过键盘操作让上一个控件获取焦点?
        请使用 Shift+Tab 或者 Ctrl+Shift+Tab 组合键。

3、Button 可以通过回车键和空格键激活。所以如果有些地方无法使用回车键(比如按钮在Dialog中),可以考虑使用空格键。

4、一些特殊的KeyCode:
        回车键:SWT.KEYPAD_CR
        小键盘的回车键:SWT.TRAVERSE_RETURN
        方向键:SWT.ARROW_UP,SWT.ARROW_DOWN,SWT.ARROW_LEFT,SWT.ARROW_RIGHT
posted on 2009-04-07 11:22 三人行,必有我师焉 阅读(2090) 评论(2)  编辑  收藏

评论

# re: SWT中自定义控件Traverse实现的必要条件 2009-04-09 13:46 genjuro
呵呵,就是这样,javadoc里还是说得很明白的  回复  更多评论
  

# re: SWT中自定义控件Traverse实现的必要条件[未登录] 2009-05-27 08:54 wyl
你还活着啊?呵呵
项目做好人就消失了
tnnd
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航:
 
GitHub |  开源中国社区 |  maven仓库 |  文件格式转换