SWT中自定义控件Traverse实现的必要条件
<p >自定义控件通常是从一个Composite或者Canvas继承而来,但是缺省状态下,这两个控件都无法通过键盘的Tab键得到焦点。通过对SWT的debug,我发现要实现该事件,必须满足一个必要条件:为自定义控件安装一个KeyEvent的监听器。<p ><p >实际上我个人认为这出自于SWT的实现者自己的考虑,可能认为如果没有KeyListener,也就意味着没有Key的操作,那么也无需通知Travserse事件,Travserse事件的前提就是Key操作。但是在某些特定情况下我们不需要KeyListener,也可以模拟出KeyEvent的效果,比如通过TraverseListener的keyTraversed方法。总而言之,想通过键盘为某一个自定义控件获取焦点,就老老实实的给控件加一个KeyListener吧。<p ><p >此处附加一些和Traverse相关的小知识:<p ><p >1、如何通过键盘的Tab键跳出 Multiple Style 的Text?<p > 请使用 Ctrl+Tab 组合键。<p ><p >2、如何通过键盘操作让上一个控件获取焦点?<p > 请使用 Shift+Tab 或者 Ctrl+Shift+Tab 组合键。<p ><p >3、Button 可以通过回车键和空格键激活。所以如果有些地方无法使用回车键(比如按钮在Dialog中),可以考虑使用空格键。<p ><p >4、一些特殊的KeyCode:<p > 回车键:SWT.KEYPAD_CR<p > 小键盘的回车键:SWT.TRAVERSE_RETURN<p > 方向键:SWT.ARROW_UP,SWT.ARROW_DOWN,SWT.ARROW_LEFT,SWT.ARROW_RIGHT<p ><p ><P align=right></P><p align="center"></p></p>
页:
[1]