Для выполнения с фиксированной задержкой некоторого кода, который вы хотите использовать объект таймера , в данном случае javax.swing.Timer . Вот демонстрация, которая применима к вашей ситуации:
public static void main(String[] args) {
SwingUtilities.invokeLater(()->{
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
JLabel label = new JLabel("One");
JButton button = new JButton("Ok");
button.addActionListener(e -> {
String oldText = label.getText();
label.setText("Changed");
Timer timer = new Timer(2000, event -> {
label.setText(oldText);
});
timer.setRepeats(false);
timer.start();
});
frame.add(label);
frame.add(button);
frame.pack();
frame.setVisible(true);
});
}
Слушатель для кнопки изменяет текст метки и запускает таймер Swing (здесь с предохранителем на 2 секунды). По истечении времени таймера он отправляет событие действия своему зарегистрированному слушателю (таймер), который в этом случае возвращает текст к исходному.