2010-11-10 44 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出来,它会有所帮助。