2010-06-29 47 views
1

我有一個搖擺JComboBoxInputVerifier正確設置。如何觸發Java Swing InputVerifier輸入JComboBox(actionPerformed)?

我正在使用組合框設置整數。

如果我在字段中鍵入「cat」並點擊標籤,我的InputVerifier會觸發並將值重置爲「0」。

如果我輸入「cat」並回車,我的InputVerifier永遠不會從actionPerformed被調用。我是否需要明確致電actionPerformed我的InputVerifier

什麼是最好的模式來驗證我的JComboBox在標籤上並輸入?這似乎是這樣的東西,應該給我「免費」的擺動模型。

回答

4

問題是「命中Tab」和「命中Enter」是指Java Swing中兩個不同的東西。但是這兩個行爲對你,我和用戶來說都是一樣的。

Swing沒有單一機制來檢測「用戶何時輸入數據」。相反,Swing的重點是「這個領域失去鍵盤焦點」和「是用戶在場內按下Enter鍵」的機制。

在語義上,從用戶的角度來看,這兩個操作意味着相同的事情:「我完成了,這是我的輸入。」但是,據我所知,Swing未能提供檢測用戶意圖的方法。由於缺乏這樣的特性,我感到很驚訝,因爲這似乎是GUI中一種形式的最基本的功能。我們需要但沒有的是「數據輸入」事件。

有一個解決辦法...

在類似的上下文(JTextField的代替的JComboBox)太陽/ Oracle的Java Tutorial提供其中一個類被創建的示例InputVerificationDemo

這個解決方法的好處是你可以在一個地方找到你的處理代碼。缺點是你仍然有這樣的麻煩:

1

這是InputVerifier的預期行爲:TAB鍵試圖改變焦點,而ENTER鍵沒有。您可以將ENTER鍵綁定到其他操作,如教程How to Use Key Bindings中所述。另外,請考慮信息性文章Key Bindings,其中包括一個方便的實用程序應用程序。

1

使用可編輯組合框時,焦點位於用作組合框編輯器的JTextField上。您可以將ActionListener添加到此文本字段。

在ActionListener中,您可以嘗試調用transferFocus()方法,該方法應該等同於標記我們的文本字段。如果這不起作用,那麼actionListener應該調用與InputVerifier相同的編輯代碼。

相關問題