Вы можете использовать JComponent.paintImmediately
для немедленной перерисовки.
РЕДАКТИРОВАТЬ: После прочтения вашего вопроса мне приходит в голову, что вы можете выполнять свою логику в потоке рассылки событий. Это будет означать, что запросы на перерисовку не будут выполняться до тех пор, пока ваш метод не вернется. Если вы поместите свой код в другой поток, это, вероятно, решит проблему, и это будет намного приятнее, чем использование paintImmediately
.
void uiFunction() {
new Thread() {
public void run() {
for(int i = 0; i < 10; i++) {
final JButton b = buttons[i];
SwingUtilities.invokeLater(new Runnable() {
b.setBackground(Color.WHITE);
b.repaint();
}
Thread.sleep(2000);
SwingUtilities.invokeLater(new Runnable() {
b.setBackground(Color.GRAY);
b.repaint();
}
}
}
}.run();
}
Это немного грязно, но, надеюсь, это даст вам представление о том, с чего начать.