Вызывается ли setBounds() в EDT?
Это setBounds()
метод Component
лайк JPanel
вызывается в ветке рассылки событий? Я спрашиваю об этом, потому что я пишу программу, которая рисует платформы и использует Swing Timer
переместить их вверх. Я отменяю setBounds()
метод, так что каждый раз, когда JPanel
будет изменен размер, платформы тоже будут изменены. Я просто хочу убедиться, что setBounds()
не изменяет размеры платформ, в то время как Timer
двигает их. Кроме того, было бы лучше использовать WindowListener
проверить, если JPanel
был изменен?
1 ответ
setBounds() будет вызываться в EDT кодом Swing, но вы должны убедиться, что собственные вызовы setBounds() вашего кода также вызывают его только в EDT. Если вы можете гарантировать, что все вызовы setBounds() происходят в EDT, вам не нужно беспокоиться о том, что setBounds() выполняется во время выполнения SwingTimer, поскольку SwingTimers по умолчанию также выполняются в EDT (поэтому они не будут выполнить одновременно).
Также я никогда не видел, чтобы кто-то переопределял setBounds(), поэтому мне интересно, нет ли альтернативного решения, такого как простой запрос границ при каждом выполнении SwingTimer. Использование слушателя для прослушивания изменения размера окна, как вы говорите, звучит намного лучше.