Swing:以编程方式修改UI而不触发回调

时间:2010-11-30 19:55:42

标签: java swing callback notifications

如果理所当然地认为你需要以编程方式修改UI的一个元素,例如JComboBox的选定项而不触发任何修改/通知事件,那么如何相对干净地完成它?

当我修改了我想要修改的内容时,我可以分离所有听众,然后重新附加它们,但通常情况下,应该如何做到这一点? (再一次,通过考虑授予一些元素应该被修改并且认为那些修改不应该触发任何回调)。

PS:我这样做是通过编写实际分离所有侦听器的方法,执行修改,然后重新附加所有侦听器并且确实有效,但对我来说似乎有点糟糕。

2 个答案:

答案 0 :(得分:2)

通常,问题不是所有听众,而是一个 - 我们自己的听众。忽略此类事件的典型模式如下:

private boolean ignoreEvents;

public void initialize(...) {
   ignoreEvents = true;
   try {
      // set the combobox value
   }
   finally {
      ignoreEvents = false;
   }
}

private void processMyXyEvent(...) {
   if (ignoreEvents) {
      return;
   }

   // listener code
}

答案 1 :(得分:1)

我认为你实施的方法是最接近你正在寻找的干净方式。虽然我理解这个要求是理所当然的,但值得注意的是,通过避免所有设置的听众(特别是所有听众,而不仅仅是你自己设置的那些),你可能最终会推动你的状态。应用于内部不一致的事物。

我想我所说的是你应该小心谨慎:)