2012-10-16 50 views
0

我的Swing代碼中有一個JTextArea組件,我想添加一個處理程序/監聽程序,該程序/監聽程序在用戶在JTextArea中輸入文字(按鍵事件;按鍵,按下鍵等)時觸發。根據上面的JavaDocs,我可以在它的內部添加DocumentListener; Document模型。然而,當我實現DocumentListener,我必須寫的實現爲:如何使Swing JTextArea響應KeyEvent?

  • removeUpdate
  • insertUpdate
  • changedUpdate

這些人的,我期待看到方法的類型!我期待看到這樣onKeyDown(KeyEvent e)onKeyUp(KeyEvent e方法等

那麼請問:我怎樣才能讓我的JTextArea迴應鍵上/下事件?提前致謝!

+1

問題是,你想達到什麼目的?如果你想過濾輸入,你應該使用'DocumentFilter',如果你想響應某些關鍵事件(比如製表符或者輸入),你應該使用[鍵綁定](http://docs.oracle.com/javase /tutorial/uiswing/misc/keybinding.html) – MadProgrammer

+0

您從未迴應我們的澄清請求,並且這可能會導致您的錯誤建議。 –

回答

1

使用addKeyListener(從Component繼承)

+2

雖然技術上沒有錯誤,但沒有上下文,這可能不是OP想要達到的正確解決方案。如果他們想要過濾鍵來防止用戶輸入某些字符,那麼實現它的地方是錯誤的,如果他們想要在給定的鍵盤上執行一個動作,他們最好使用鍵盤綁定,因爲某些鍵盤筆畫贏了與關鍵聽衆一起舉辦活動,將文字粘貼到場上也不會引發關鍵事件。 IHMO – MadProgrammer

3

這可能是使用密鑰綁定的良好局面。在一秒鐘內,我會給你更多關於這方面的信息。一般來說,你會嘗試避免使用KeyListener,因爲這被認爲是一個低級別的構造,對於這種事情可能太低,並且經常使用Key Bindings(根據Key Bindings教程)。


編輯1
在這裏你去:How to use Key Bindings

從Swing教程直接報價:

的替代鍵綁定使用按鍵偵聽。關鍵監聽器作爲鍵盤輸入的低級接口,但是對於單個鍵的響應,鍵綁定更合適,並且傾向於導致更容易維護的代碼。如果鍵綁定在組件沒有焦點時處於活動狀態,則鍵監聽器也很困難。關鍵綁定的一些優點是它們有些自我記錄,考慮了包含層次結構,鼓勵可重用的代碼塊(Action對象),並允許輕鬆移除,定製或共享操作。而且,它們可以很容易地更改動作綁定的關鍵。 Actions的另一個優點是它們有一個啓用狀態,它提供了一種簡單的方法來禁用該操作,而無需跟蹤它所連接的組件。


編輯2
注意,有些時候,你會想過濾文本輸入到您的組成部分,並在您將使用DocumentFilter。我認爲我們有點受到當前問題的阻礙,因爲您尚未告訴我們此功能的總體目標是什麼。請告訴我們更多,以便我們能給你一個更完整,更正確的答案。