2011-08-14 28 views
0

有沒有辦法將按鍵從JTextField傳播到其容器的KeyListener實施?通過聚焦組件及其容器捕獲「Tab」鍵

所以實際上,按鍵會被文本字段和JPanel處理。現在文本字段正在消耗按鍵,因此不存在於下面的JPanel

+0

特別是我正在捕捉「Tab」按鍵 – cholland

+1

選項卡在Java Swing應用程序中有特殊含義,通常由[focus subsystem](http://download.oracle.com/javase/tutorial/uiswing/)管理misc/focus.html)及其[FocusTraversalPolicy](http://download.oracle.com/javase/6/docs/api/java/awt/FocusTraversalPolicy.html) –

回答

2

在Swing中,選項卡鍵用於將焦點從一個組件更改爲另一個組件。文章Validating Input討論了InputVerifier,這可能會幫助你做你想做的事。

1

問題是爲什麼你想這樣做?你的實際需求是什麼,反對你試圖解決的問題。由兩個組件處理事件通常不是一個好主意。

一般而言,您不應該使用KeyListeners。 Swing旨在使用Key Bindings。但是,在這種情況下,它不會起作用,因爲如前所述,焦點子系統處理選項卡鍵。

如果這是您的問題的唯一解決方案,那麼我認爲您可以使用KeyEventPostProcessor來偵聽任何KeyEvent。有關更多信息,請參閱Global Event Listeners

+0

我已經構建了一個包含各種搖擺輸入的類組件(JTextFields,JComboBox,JLabel等)都在一個JPanel內,並且具有常規工具欄的高度。如果有太多的小部件添加到欄中,某些組件將隱藏在屏幕之外。由於用戶將使用Tab鍵從一個組件跳轉到另一個組件,因此我想通過底層的JPanel來捕獲Tab鍵,這樣如果他們試圖「跳到」屏幕上的某個組件,它將觸發所有組件的「移位」到左邊並重新佈置面板,並具有先前隱藏的組件可見和聚焦。 – cholland