2012-08-13 46 views
0

這個API有什麼用處?ItemListener.itemStateChanged(ItemEvent e)

幾個月前我採用了它,考慮到我可以使用它來捕獲ComboBox中的鍵盤和鼠標操作,以在用戶做出選擇時調用業務邏輯。作爲一名開發人員,我只用鼠標一起走過,幸福無知,認爲我的解決方案很好,直到測試人員參與其中,並嘗試使用帶有鍵盤的組合框。似乎itemStateChanged()對於改變項目狀態意味着什麼意義,對我來說有一個非常直觀的(對我來說)。

與鼠標一起使用時,用戶可以通過鼠標移動到下拉列表上,其中下拉列表突出顯示當前包含鼠標光標但不生成事件的組合框條目。用戶實際點擊某個項目時會生成該事件。這是非常直觀的,我期望的。

另一方面,通過鍵盤,每按一下向下箭頭就會生成一個itemStateChanged事件。這是違反直覺的,而不是我想要的。我只想在用戶通過按下Enter鍵發出選擇信號時發出事件,這表示已做出選擇 - 即鼠標點擊的模擬,而不是鼠標移動的模擬。有沒有辦法讓組合框以這種方式行爲,或者我不能使用itemStateChanged來捕獲這些事件?

我還應該補充一點,ItemEvent本身並不包含任何能夠幫助我消除歧義的情況。

更新:好的,這是問題的核心:我怎樣才能讓Swing通過組合框的下拉列表向下箭頭,等同於通過下拉列表中的元素移動鼠標? ItemListener和ActionListener都將箭頭鍵操作視爲「選擇」而不是導航。而我想讓鍵盤與鼠標相似。我們的要求是使所有的一切都與鍵盤一起工作。鼠標是一個很好的擁有該應用程序的有經驗的用戶不會使用太多。

回答

1

根據JavadocitemStateChanged(ItemEvent e)在用戶選擇或取消選擇項目時調用。你看到的是完全一樣的行爲。使用箭頭鍵,對於每個按鍵,您都可以有效地選擇(,同時也取消選擇)組合中的一個特定項目。

對於你的情況,我想你應該考慮實現你的業務邏輯的JButton該服務器爲用戶選擇的確認或嘗試在JComboBoxFocusListener並讓您的邏輯的public void focusLost(FocusEvent e)部分的一部分。 Here's a tutorial幫助你獲得更好的照片FocusListener

+0

按鈕不可行。 FocusListener可能是。 – 2012-08-13 20:50:55

+0

看起來只有低級聽衆是唯一能夠工作的人,因爲Swing堅持將鼠標箭頭鍵與鼠標放在下拉列表上不同。我必須通過相同的代碼漏斗鼠標點擊(MouseListener)和輸入按鍵(keyListener),或者關閉FocusListener。有點醜。 – 2012-08-13 22:35:40

+0

我不得不實現MouseListener,KeyListener和FocusListener以處理所有情況,但現在它很好地工作。我回到我原來的問題:什麼用ItemListener? Java似乎有選擇和導航都混在這裏。 – 2012-08-14 19:55:05

0

JComboBox文檔

aListener會收到一個或兩個ItemEvents時所選擇的項目改變

現在,我將是第一個admint的措辭是一盞小燈,但是這是說,當用戶選擇和項目(從下拉菜單中)時,您至少會收到一次通知,可能是兩次。

你真的想用什麼是ActionListener

的的ActionListener當已經做出選擇將接收一個ActionEvent。如果組合框是可編輯的,那麼編輯停止時會觸發一個ActionEvent。

+0

嗯。我得出了相同的結論,並用ActionListener重新實現。唉!它不起作用。按下箭頭鍵將生成一個動作事件。 – 2012-08-13 20:48:57