我创建了一个对话框,其中显示了两个JLists,以及一个从第二个JList获取所选值并执行某些操作的按钮(例如它输出所选值)。根据来自第一个JList的值的选择来更新来自第二个JList的值列表。
最初显示对话框时,该按钮被禁用。当从第一个JList和第二个JList中选择一个值时,启用该按钮并向其添加所需的选择侦听器。
问题是每次单击该按钮时,输出消息的数量等于选择第二个JList的值的时间。例如,如果我从第二个JList中选择一个值,那么我改变主意并选择另一个值,单击该按钮将输出两次消息。 有没有人知道防止这种事情的方法?
答案 0 :(得分:2)
您的ListSelectionListener应检查(e.getValueIsAdjusting() == false)
否则您将回复所有用户的选择,而不仅仅是最终用户。
答案 1 :(得分:1)
是:不要缓存选择,只需处理第二个列表中的实际选择。
如果可能,请在按下按钮后发布执行的代码。我想,你有一些收集(列表或队列),它存储你在对话框中所做的所有选择,当你按下按钮时,每个存储的选择都会被处理。
这看起来像是一种预期的行为,因为你通常不会偶然编码;)
如果有意,并且您只想消除重复项,请考虑使用Set
而不是列表,因为Set
只会包含唯一值。
答案 2 :(得分:1)
它做得非常完美。
它会触发两个事件,
1>选择将从第一项中删除。
2 - ;选择完成第二项。
正如fbcocq所说,你应该检查getValueIsAdjusting()。检查this,它会有所帮助。
答案 3 :(得分:0)
每次启用按钮时,是否都在向按钮添加ActionListener?