JLists中的JButton侦听器事件的多个实例

时间:2010-11-10 12:28:13

标签: java swing jlist

我创建了一个对话框,其中显示了两个JLists,以及一个从第二个JList获取所选值并执行某些操作的按钮(例如它输出所选值)。根据来自第一个JList的值的选择来更新来自第二个JList的值列表。

最初显示对话框时,该按钮被禁用。当从第一个JList和第二个JList中选择一个值时,启用该按钮并向其添加所需的选择侦听器。

问题是每次单击该按钮时,输出消息的数量等于选择第二个JList的值的时间。例如,如果我从第二个JList中选择一个值,那么我改变主意并选择另一个值,单击该按钮将输出两次消息。 有没有人知道防止这种事情的方法?

4 个答案:

答案 0 :(得分:2)

您的ListSelectionListener应检查(e.getValueIsAdjusting() == false)否则您将回复所有用户的选择,而不仅仅是最终用户。

答案 1 :(得分:1)

是:不要缓存选择,只需处理第二个列表中的实际选择。

如果可能,请在按下按钮后发布执行的代码。我想,你有一些收集(列表或队列),它存储你在对话框中所做的所有选择,当你按下按钮时,每个存储的选择都会被处理。

这看起来像是一种预期的行为,因为你通常不会偶然编码;)

如果有意,并且您只想消除重复项,请考虑使用Set而不是列表,因为Set只会包含唯一值。

答案 2 :(得分:1)

它做得非常完美。

它会触发两个事件,

1>选择将从第一项中删除。

2 - ;选择完成第二项。

正如fbcocq所说,你应该检查getValueIsAdjusting()。检查this,它会有所帮助。

答案 3 :(得分:0)

每次启用按钮时,是否都在向按钮添加ActionListener?