在EDT中调用了setBounds()吗?

时间:2014-07-23 19:10:09

标签: java swing thread-safety event-dispatch-thread setbounds

setBounds()的{​​{1}}方法是否像Component一样调用事件调度线程?我问这个是因为我正在编写一个程序来绘制平台并使用JPanel来移动它们。我重写Swing Timer方法,以便每次调整setBounds()的大小时,平台也会调整大小。我只是想确保JPanel移动它们时setBounds()没有调整平台大小。另外,使用Timer检查WindowListener是否已调整大小会更好吗?

1 个答案:

答案 0 :(得分:1)

setBounds()将在EDT上由Swing代码调用,但您必须确保代码自己的setBounds()调用也只在EDT上调用它。如果你可以确保在EDT上发生setBounds()的所有调用,那么你不必担心在执行SwingTimer时执行setBounds()因为SwingTimers默认情况下也在EDT上执行(所以他们不会同时执行。)

此外,我从未见过有人覆盖setBounds()所以我想知道是否没有替代解决方案,例如每次SwingTimer执行时只查询边界。使用监听器监听窗口调整大小就像你说的那样听起来好多了。