Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLists中JButton侦听器事件的多个实例_Java_Swing_Jlist - Fatal编程技术网

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

Java JLists中JButton侦听器事件的多个实例,java,swing,jlist,Java,Swing,Jlist,我已经创建了一个对话框,其中显示了两个JList和一个按钮,该按钮从第二个JList中获取所选值并执行某些操作(例如输出所选值)。第二个JList中的值列表将根据从第一个JList中选择的值进行更新 当对话框最初显示时,按钮被禁用。当从第一个JList和第二个JList中选择一个值时,将启用该按钮,并向其添加所需的选择侦听器 问题在于,每次单击按钮时,输出消息的数量等于选择第二个JList值的时间。例如,如果我从第二个JList中选择一个值,然后我改变主意并选择另一个值,则单击按钮将输出消息两次

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

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

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

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

如果可能的话,在按下按钮后张贴执行的代码。我猜,您有某种类型的集合(列表或队列),存储您在对话框上所做的所有选择,当您按下按钮时,每个存储的选择都会被处理

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


如果它是有意的,你只想消除重复,考虑使用<代码> SET>代码>而不是一个列表,因为<代码> SET>代码>只包含唯一的值。

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

如果可能的话,在按下按钮后张贴执行的代码。我猜,您有某种类型的集合(列表或队列),存储您在对话框上所做的所有选择,当您按下按钮时,每个存储的选择都会被处理

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


如果它是有意的,你只想消除重复,考虑使用<代码> SET>代码>而不是一个列表,因为<代码> SET>代码>只包含唯一的值。

< P>你的ListSoice侦听器应该检查<代码>(E.GETValueISCudioTebug()==false)否则,您将响应用户的所有选择,而不仅仅是最后一个选择。

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

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

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

该按钮的功能非常完美

它引发了两个事件

1> 所选内容将从第一项中删除

2> 对第二项进行选择


正如fbcocq所说,您应该检查getValueIsAdjusting()。看看吧,它会有帮助的。

它能完美地完成它应该做的事情

它引发了两个事件

1> 所选内容将从第一项中删除

2> 对第二项进行选择

正如fbcocq所说,您应该检查getValueIsAdjusting()。退房,会有帮助的