我在我的對話框中有一個按鈕。在按下回車鍵後,分配給該按鈕的動作將逐個調用。java swing:焦點丟失,輸入關鍵事件
public void buttonAction1() { }
....
public void buttonAction2() { }
在我的對話框中,我也有一個文本字段,其中偵聽了焦點丟失事件。每當最初焦點在該文本框內,我點擊標籤或使用鼠標我點擊按鈕,調用焦點丟失的事件並打開一個彈出窗口。此彈出窗口有助於設置文本字段內的值。該值將被按鈕按下時調用的操作使用。
public void focusLostAction() { }
現在的問題是,當焦點位於文本字段內部並按下回車鍵時,焦點丟失事件不會被調用。所以彈出窗口不會被打開,並且在該文本字段中沒有設置正確的值。但是由於輸入了關鍵事件,對該關鍵按鈕的操作被調用,並且此操作無法在文本字段內找到適當的值。
裏面的動作方法,該方法被稱爲上輸入的鍵事件,我試圖將焦點設置按鈕來手動使用:
public void buttonAction1() {
button.requestFocusInWindow();
}
public void buttonAction2() {
// do the remaining task
}
予使用,button.requestFocus也嘗試;
我期待手動設置焦點會在文本字段中調用鬆散焦點,焦點丟失事件可能會被調用(因爲這是在單獨的swing工作線程中實現的)。但它不起作用。請讓我知道,如果您之前遇到過這個問題並且解決方案相同。 謝謝。
爲了更好的幫助下架失去重心越早,張貼[SSCCE(HTTP:/ /sscce.org)。如果焦點丟失事件未被調用,那麼問題是什麼?您何時在該按鈕上調用requestFocus? – 2012-07-17 07:48:43
確切地說,你在寫'button.requestFocusInWindow();',因爲如果你在'JTextField'中按下'ENTER'鍵,那麼'actionPerformed(...)'方法將被調用,而不是'focusLost(...) )'如果你在用'JTextField'附加的'actionPerformed()'內部寫上面的行,那麼只有'focusLost()'方法才能得到調用。 – 2012-07-17 07:49:57
我已經更新了Guillaume建議的查詢。我是否以不正當的方式做這件事? – user613114 2012-07-17 08:03:25