這個API有什麼用處?ItemListener.itemStateChanged(ItemEvent e)
幾個月前我採用了它,考慮到我可以使用它來捕獲ComboBox中的鍵盤和鼠標操作,以在用戶做出選擇時調用業務邏輯。作爲一名開發人員,我只用鼠標一起走過,幸福無知,認爲我的解決方案很好,直到測試人員參與其中,並嘗試使用帶有鍵盤的組合框。似乎itemStateChanged()對於改變項目狀態意味着什麼意義,對我來說有一個非常直觀的(對我來說)。
與鼠標一起使用時,用戶可以通過鼠標移動到下拉列表上,其中下拉列表突出顯示當前包含鼠標光標但不生成事件的組合框條目。用戶實際點擊某個項目時會生成該事件。這是非常直觀的,我期望的。
另一方面,通過鍵盤,每按一下向下箭頭就會生成一個itemStateChanged事件。這是違反直覺的,而不是我想要的。我只想在用戶通過按下Enter鍵發出選擇信號時發出事件,這表示已做出選擇 - 即鼠標點擊的模擬,而不是鼠標移動的模擬。有沒有辦法讓組合框以這種方式行爲,或者我不能使用itemStateChanged來捕獲這些事件?
我還應該補充一點,ItemEvent本身並不包含任何能夠幫助我消除歧義的情況。
更新:好的,這是問題的核心:我怎樣才能讓Swing通過組合框的下拉列表向下箭頭,等同於通過下拉列表中的元素移動鼠標? ItemListener和ActionListener都將箭頭鍵操作視爲「選擇」而不是導航。而我想讓鍵盤與鼠標相似。我們的要求是使所有的一切都與鍵盤一起工作。鼠標是一個很好的擁有該應用程序的有經驗的用戶不會使用太多。
按鈕不可行。 FocusListener可能是。 – 2012-08-13 20:50:55
看起來只有低級聽衆是唯一能夠工作的人,因爲Swing堅持將鼠標箭頭鍵與鼠標放在下拉列表上不同。我必須通過相同的代碼漏斗鼠標點擊(MouseListener)和輸入按鍵(keyListener),或者關閉FocusListener。有點醜。 – 2012-08-13 22:35:40
我不得不實現MouseListener,KeyListener和FocusListener以處理所有情況,但現在它很好地工作。我回到我原來的問題:什麼用ItemListener? Java似乎有選擇和導航都混在這裏。 – 2012-08-14 19:55:05