自定義控件通常是從一個(gè)Composite或者Canvas繼承而來,但是缺省狀態(tài)下,這兩個(gè)控件都無法通過鍵盤的Tab鍵得到焦點(diǎn)。通過對(duì)SWT的debug,我發(fā)現(xiàn)要實(shí)現(xiàn)該事件,必須滿足一個(gè)必要條件:為自定義控件安裝一個(gè)KeyEvent的監(jiān)聽器。
實(shí)際上我個(gè)人認(rèn)為這出自于SWT的實(shí)現(xiàn)者自己的考慮,可能認(rèn)為如果沒有KeyListener,也就意味著沒有Key的操作,那么也無需通知Travserse事件,Travserse事件的前提就是Key操作。但是在某些特定情況下我們不需要KeyListener,也可以模擬出KeyEvent的效果,比如通過TraverseListener的keyTraversed方法。總而言之,想通過鍵盤為某一個(gè)自定義控件獲取焦點(diǎn),就老老實(shí)實(shí)的給控件加一個(gè)KeyListener吧。
此處附加一些和Traverse相關(guān)的小知識(shí):
1、如何通過鍵盤的Tab鍵跳出 Multiple Style 的Text?
請(qǐng)使用 Ctrl+Tab 組合鍵。
2、如何通過鍵盤操作讓上一個(gè)控件獲取焦點(diǎn)?
請(qǐng)使用 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
實(shí)際上我個(gè)人認(rèn)為這出自于SWT的實(shí)現(xiàn)者自己的考慮,可能認(rèn)為如果沒有KeyListener,也就意味著沒有Key的操作,那么也無需通知Travserse事件,Travserse事件的前提就是Key操作。但是在某些特定情況下我們不需要KeyListener,也可以模擬出KeyEvent的效果,比如通過TraverseListener的keyTraversed方法。總而言之,想通過鍵盤為某一個(gè)自定義控件獲取焦點(diǎn),就老老實(shí)實(shí)的給控件加一個(gè)KeyListener吧。
此處附加一些和Traverse相關(guān)的小知識(shí):
1、如何通過鍵盤的Tab鍵跳出 Multiple Style 的Text?
請(qǐng)使用 Ctrl+Tab 組合鍵。
2、如何通過鍵盤操作讓上一個(gè)控件獲取焦點(diǎn)?
請(qǐng)使用 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