我正在寻找一个仅在用户(使用该程序的用户)选择JComboBox
中的项目时才会触发的侦听器。我不想使用ActionListener
或ItemListener
,因为当我通过程序选择项目时,这些也会触发。而且我也无法使用MouseListener
,因为它仅在我点击JComboBox
时触发,而不是在我选择项目时触发。
我想知道最简单的方法是什么?目前,我的解决方案很混乱。当我通过代码更改jcombobox的选定项目时,我将标志设置为true。在我的动作监听器中,只有在标志为假的情况下才会执行。
答案 0 :(得分:2)
A)我建议您在以编程方式执行选择时暂时删除侦听器。
B)如果您的程序更改不是另一个GUI事件的影响,您可以使用以下丑陋/不健壮/容易出错/“hacky”方式解决它:检查EventQueue.isEventDispatchThread()
以确定是否点击由GUI线程(用户)触发。
C)(哎呀我只是重新阅读你的问题,看到你已经发现了下面描述的方法。基本上我会说这个(或上面介绍的方法)是你最好的选择。)
另一种选择是使用一个名为nonUserSelection
的布尔标志,在您以编程方式选择值并在之后重置为false之前将其设置为true。在动作监听器中,您只需添加
if (nonUserSelection)
return;