2012-06-19 57 views
3

我有一個KeyboardFocusManager與覆蓋dispatchKeyEvent()方法來處理箭頭鍵導航和輸入。只要按下鍵,我就需要處理關鍵事件。不幸的是,按住輸入結果的KEY_TYPED事件不包含關鍵位置。有沒有辦法找出當前正在按哪個輸入?或者我可以壓制KEY_TYPED事件以獲得KEY_PRESSED事件嗎?如何找到KEY_TYPED事件的輸入位置?

編輯: 我不能告訴你爲什麼它使用KeyboardFocusManager而不是KeyListeners來完成,但我確信有這樣做的原因。到目前爲止,不可能再改變這一點。問題是,對於我們的系統(舊的終端仿真器),左側的輸入鍵是一個導航鍵。按下Enter鍵將焦點移動到當前行後的下一個文本字段。右回車鍵是將用戶輸入發送到服務器的命令鍵。

回答

3

使用在How to Write a Key Listener中發現的KeyEventDemo,我無法重現您爲KEY_PRESSEDKEY_RELEASED所描述的效果。當然,「KEY_TYPED事件沒有keyLocation」。

不清楚你爲什麼使用Focus Listener,因爲許多組件已經bind某些鍵被定義爲Actionexample綁定箭頭鍵,這些鍵響應主機偏好調節的自動重複事件。

+0

奇怪的問題+1 – mKorbel

+0

我不能告訴你爲什麼它使用KeyboardFocusManager而不是KeyListeners來完成,但我確信有這樣做的原因。到目前爲止,不可能再改變這一點。問題是,對於我們的系統(舊的終端仿真器),左側的輸入鍵是一個導航鍵。按下Enter鍵將焦點移動到當前行後的下一個文本字段。右回車鍵是將用戶輸入發送到服務器的命令鍵。 由於某些原因,在按住Enter鍵時我只會收到一個KEY_PRESSED事件。 – Markus

+1

是否可以將'KeyboardFocusManager'擴展以停止自動重複事件?您可以查看文章[*全球事件調度*](http://tips4java.wordpress.com/2009/09/06/global-event-dispatching/),看看它是否有任何亮點。 – trashgod