重写mouseClicked(MouseEvent e)不会更改JFrame的组件JLable?

时间:2014-10-12 15:31:31

标签: java swing jframe mouseevent

我实施了包含一些JFrame的{​​{1}}。点击后我想改变它们的外观。附加代码应该这样做。事实上:它。使用相同的代码并将其放入内部Thread类的运行中可以完成这项工作。内部Thread-instance反转单击的JLable两次。

有人可以给我一个提示,为什么JLable - 方法似乎无法影响点击的mouseClicked外观吗?

JLable

1 个答案:

答案 0 :(得分:3)

不需要synchronized代码块。从事件代码执行的所有代码都将在事件调度线程(EDT)上执行。由于您应该始终更新EDT上组件的属性,因此您不必担心其他线程更新组件。

看起来您想暂时更改标签的颜色。问题是wait()方法将阻止EDT并阻止GUI重新绘制自己。

你可以:

  1. 使用SwingWorker启动一个线程然后再睡一段时间。然后,当工人完成后,您可以恢复标签的颜色。有关更多信息和示例,请参阅Concurrency
  2. 使用Swing Timer安排更改。有关详细信息,请参阅How to Use Swing Timers