2010-11-10 46 views
0

我創建了一個對話框,其中顯示了兩個JLists,並且有一個按鈕從第二個JList獲取選定的值並執行某些操作(例如輸出所選值)。根據來自第一JList的值的選擇來更新來自第二JList的值的列表。JLists中JButton偵聽器事件的多個實例

當最初顯示對話框時,該按鈕被禁用。當從第一個JList中選擇一個值,然後從第二個JList中選擇一個值時,將啓用該按鈕,並將添加所需的選擇偵聽器。

問題是,每次單擊按鈕時,輸出消息的數量等於第二個JList的值被選中的時間。例如,如果我從第二個JList中選擇一個值,然後我改變主意並選擇另一個值,則點擊該按鈕將輸出該消息兩次。 有沒有人知道一種方法來防止這種事情?

+5

你能發佈一段代碼嗎? – Adamski 2010-11-10 12:30:38

回答

1

是的:不要緩存選擇,只處理第二個列表中的實際選擇。

如果可能,發佈一次按下按鈕後執行的代碼。我想,你有一些收集(一個列表或一個隊列),用於存儲你在對話框上做的所有選擇,當你按下按鈕時,每個存儲的選擇都會被處理。

這看起來像一個預期的行爲,因爲你通常不會偶然代碼這一點;)

如果打算和你只是想消除重複,可以考慮使用一個Set,而不是一個列表,作爲Set將只包含唯一值。

2

您的ListSelectionListener應檢查(e.getValueIsAdjusting() == false),否則您將響應所有用戶的選擇而不僅僅是最後一個。

0

您是否每次啓用它時都向該按鈕添加一個ActionListener?

1

它完全做它應該做的。

它引發兩個事件,

1>從第一項中刪除選區。

2>選擇完成第二項。

所以fbcocq說,你應該檢查getValueIsAdjusting()。檢查this出來,它會有所幫助。