Да, вы ДОЛЖНЫ использовать Swing Timer. Вы НЕ ДОЛЖНЫ использовать утилиты Timer и TimerTask.
Когда срабатывает таймер Swing, код выполняется в EDT, что означает, что вам просто нужно вызвать метод label.setText ().
При использовании uitl Timer и TimerTask код НЕ выполняется в EDT, а это означает, что вам нужно заключить код в SwingUtilities.invokeLater, чтобы убедиться, что код выполняется в EDT.
Таким образом, использование Swing Timer короче и элегантнее, чем ваш нынешний подход, оно упрощает кодирование, поскольку код выполняется в EDT.