Вам нужно использовать отдельный поток для управления вашим событием GUI.Вы можете сделать это, используя SwingWorker , как предложено Amine, или реализовать интерфейс Runnable , или расширить класс Thread , разработав метод run()
Это задача вашего потока.
Вы можете прочитать этот старый вопрос о SO: Как использовать SwingWorker в Java?
Учебное пособие по SwingWorker: http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
Учебное пособие для создания темы: http://docs.oracle.com/javase/tutorial/essential/concurrency/
Цвет обновляется только после последнего вызова изменения цвета.
Если выне используйте отдельный поток, ваш графический интерфейс будет зависать до тех пор, пока метод не будет полностью выполнен, и вы не увидите изменения цвета, разделенные Thread.sleep(500);
.
ОБНОВЛЕНИЕ
В этой ссылке, в абзаце Почему графический интерфейс Swing зависает или блокируется? , вы можете понять, почему Java Swing GUI зависает, с использованием одного потока.
Проверьте также эту официальную ссылку, в пункте Создание тем , и эта страница, которая возвращает:
Однопоточное правило Swing гласит, что компоненты Swing могут быть доступны только одному потоку.Это правило применяется как к получению, так и к установке, и один поток известен как поток события-отправки.
Правило однопоточности хорошо подходит для компонентов пользовательского интерфейса, поскольку они, как правило, используются в однозадачном режиме.в любом случае, с большинством действий, инициируемых пользователем.Кроме того, создавать безопасные для нитей компоненты сложно и утомительно: это хорошая вещь, которую нельзя делать, если этого можно избежать.Но при всех своих преимуществах правило однопотоковости имеет далеко идущие последствия.
Компоненты Swing, как правило, не будут соответствовать правилу однопоточности, если все их события не отправляются и не принимаются в потоке диспетчеризации событий.Например, события изменения свойства должны отправляться в потоке отправки событий, а события изменения модели - в потоке отправки событий.
Для компонентов на основе модели, таких как JTable и JTree,Правило однопоточности подразумевает, что доступ к самой модели возможен только из потока событий.По этой причине методы модели должны выполняться быстро и никогда не должны блокироваться, иначе весь пользовательский интерфейс будет не отвечать.
Я думаю, что приведенные выше предложения очень полезны для лучшего понимания пакета Swing
.
Я сообщаю о предложении trashgod.
Вы можете использовать класс Timer
из пакета javax.swing.Timer
.Это тоже хорошая альтернатива.
В этом вопросе trashgod сообщает несколько примеров Timer
.
Проверьте здесь для учебника о Timer
.