Вызывается ли 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. Использование слушателя для прослушивания изменения размера окна, как вы говорите, звучит намного лучше.

Другие вопросы по тегам