在事件调度线程上调用Component
(如JPanel
)的setBounds()
方法?我问这个问题是因为我正在编写一个程序,该程序绘制平台并使用Swing Timer
将它们向上移动。我重写了setBounds()
方法,这样每次JPanel
调整大小时,平台也会调整大小。我只是想确保setBounds()
在Timer
移动平台时不会调整平台的大小。此外,使用WindowListener
来检查JPanel
是否调整大小会更好吗?
setBounds()将由Swing代码在EDT上调用,但是您必须确保代码自己对setBounds()的调用也只在EDT上调用它。如果你能确保所有的setBounds()调用都发生在EDT上,那么你就不必担心setBounds()在你的SwingTimer被执行的同时被执行,因为SwingTimer在默认情况下也会在EDT上执行(所以它们不会同时执行)。
我也从来没有见过有人重写setBounds(),所以我想知道是否有一个替代的解决方案,如每次你的SwingTimer执行查询边界。像你说的那样使用侦听器侦听窗口大小确实听起来更好。