Хорошо, что вы удалили Thread.sleep
, так как ваш пользовательский интерфейс не реагирует на эти 2 секунды.
Что вы можете сделать, это запустить Timer
, который запускается только один раз:
int delay = 2000;
Timer timer = new Timer( delay, new ActionListener(){
@Override
public void actionPerformed( ActionEvent e ){
jLabel12.setForeground( Color.red );
}
} );
timer.setRepeats( false );
timer.start();
Обратите внимание, что Timer
является javax.swing.Timer
, что гарантирует, что метод actionPerformed
для ActionListener
вызывается в потоке отправки событий, соблюдая правила потоковой передачи Swing.
Это также возможно с помощью SwingWorker
, но для этого я буду придерживаться Timer
. Если вы хотите использовать SwingWorker
, вы можете просто использовать Thread.sleep
в методе doInBackground()
и обновить JLabel
в методе done()
.
Что-то в строках
class Delay extends SwingWorker<Void, Object> {
@Override
public void doInBackground() {
Thread.sleep( 2000 );
}
@Override
protected void done() {
jLabel12.setForeground( Color.red );
}
}