仅在用户交互后调用itemStateChanged()

时间:2012-04-26 08:40:57

标签: java swing

在我的swing应用程序中,我有一个带有ItemListener的组合框,如果用户更改了值,则会执行X(通过itemStateChanged())。 但是,我也有一个不同的功能,可以更改该组合框的值。在这种情况下,我不希望X完成。

有没有办法找出状态变化是由用户交互还是从函数引起的?

谢谢!

编辑:我使用了flag方法。谢谢你的快速解答。我只想补充一点,itemStatechanged实际上被调用了两次,一次用于取消选择,一次用于选择。这需要处理,否则旗帜不会有任何影响。讨论了这个问题here

2 个答案:

答案 0 :(得分:6)

有两种方法可以进行检查:

  1. 定义标记isUser。默认情况下,该标志为true。在以编程方式更改之前,将其设置为false并在设置组合框值后重置。在监听器中,只需检查标志并在必要时跳过操作。
  2. 保留对侦听器的引用并在设置值之前将其删除,然后添加。

答案 1 :(得分:4)

根据我的理解,您可以使用旗帜轻松解决您的问题。 只需制作一个布尔标志,例如isDoneByMethod将进入设置为true且结尾设置为false的方法,并在这两者之间对组合框执行操作。然后在itemStateChanged()内检查isDoneByMethod标志的值并采取相应的行动。