2011-12-29 21 views
7

當匿名用戶低估了我的涉及KeyListeners的答案並建議使用鍵綁定代替時,出現此問題。這位匿名用戶告訴我KeyListener界面是舊的AWT解決方案,不應該使用。比較KeyListeners和鍵綁定之間的功能

但是,我不知道我是否應該完全信任這些信息。我研究了各種網站,包括oracle,並沒有發現關於KeyListeners或Key Bindings的功能。我意識到兩人執行類似任務的事實,但我不確定「幕後」到底發生了什麼,可以這麼說。

我有點傾向於在未來的項目中使用Key Bindings,因爲我獲得的研究表明,KeyListener接口要求有問題的組件需要焦點,而Key Bindings則沒有。但是,我很困惑。這是爲什麼?密鑰綁定如何觸發與KeyListeners不同?

P.S.我很確定這是一個罕見的情況,但是在某些情況下使用KeyListeners更合適嗎?

回答

10

How to Use Key Bindings解釋了基本知識。

綁定用於將特定的動作映射到特定的KeyStroke。

當所有其他抽象不起作用時,KeyListener是最後的手段。也許你在聽任何KeyStroke的時候會使用KeyListener。因此,爲字母表的所有字母創建26個綁定是不實際的。

但在許多情況下,還有更好的API可供使用。例如,不是在文本字段上偵聽KeyEvent,而是使用DocumentListener來偵聽對文檔的更改。

+0

謝謝!這有很大幫助。我之前已經閱讀過這個鏈接,但並不像我剛纔那樣完整。我沒有注意到。我完全跳過了解釋Key Bindings如何工作的部分。 >:o – fireshadow52 2011-12-29 05:51:43

0

我會建議你使用鍵綁定的原因很多:

  • 它的實際工作比KeyListener的更快。
  • KeyBinding更加完善,可以提供更多功能。
  • 雖然您需要使用Swing計時器,但它對遊戲更好。
  • 是可設置和可共享的。

它可以是很難拋開用它來一個KeyListener的但KeyListener的將不能在一場比賽中處理多個按鍵。