На самом деле, у вас могут быть проблемы с перерисовкой самой кнопки.
IIRC, setBackground()
просто изменит фоновое поле и вызовет событие перерисовки (вызвав repaint()
).Но реальная перекраска не произойдет сразу же, даже если вызов в EDT.Вместо этого он отправит событие рисования, которое будет обработано позже (и, возможно, агрегировано с другими событиями рисования).
Следовательно, если в вашем коде нет ничего между двумя вызовами invokeLater()
, вы можетевидеть только последний набор цветов, то есть синий , и никогда не видеть красный фон вообще, но это во многом зависит от промежуточного кода.
Например, если вы поставили sleep()
между ними, вы, вероятно, увидите оба цвета: сначала красный , затем синий .