0

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

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

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

4

4 回答 4

2

您的 ListSelectionListener 应该检查,(e.getValueIsAdjusting() == false)否则您将响应所有用户的选择,而不仅仅是最后一个。

于 2010-11-10T13:06:12.070 回答
1

它完美地完成了它应该做的事情。

它触发两个事件,

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

2> 选择第二个项目。

因此,正如 fbcocq 所说,您应该检查 getValueIsAdjusting()。看看这个,它会有所帮助。

于 2010-11-10T16:00:42.413 回答
1

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

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

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

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

于 2010-11-10T12:41:33.633 回答
0

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

于 2010-11-10T15:27:22.927 回答