Похоже, ваш код не попал в пост, но у меня такое чувство, что я знаю, что не так, когда вы сформулировали свой вопрос: -)
Swing использует однопоточный цикл событий, чтобы творить чудеса. В этом потоке вызываются такие вещи, как события действия, а также такие вещи, как рисование.
Если вы используете простой цикл while, чтобы действовать как задержка часов, вы свяжете EDT (поток диспетчеризации событий), так что у Swing никогда не будет возможности перекрасить ваш экран! Вы можете даже заметить, что перетаскивание окна за пределы экрана может полностью его убрать.
Решением является использование механизма задержки, который работает в системе событий. К счастью, такая вещь существует! Взгляните на javax.swing.Timer (примечание: есть другие классы, называемые Timer, но это единственный, который работает в системе событий). Вызывая setText для вашего JLabel (и, возможно, перерисовывая) в actionListener of этот таймер, вы можете получить поведение, похожее на часы.