Вы возитесь с веткой диспетчера событий.Это приведет к непредвиденному поведению пользовательского интерфейса, как вы видите.Если вы планируете делать анимации такого типа, обязательно прочитайте то, что предложил @Andrew Thompson, а также посмотрите, можете ли вы прочитать это - Грязные клиенты
Лучше использоватьSwing Timer
, как показано в примере curde-ниже: ( да, это грубо, я не беспокоился об остановке таймера и т.д. ):
public class DelayTest extends JPanel{
JLabel messageLabel = new JLabel();
JButton actionButton = new JButton("Click Me");
String[] messages = {"Clicked", "Stop!"};
int i=0;
public DelayTest(){
super();
add(messageLabel);
add(actionButton);
actionButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if(i<=1)
messageLabel.setText(messages[i++]);
}
});
timer.start();
}
});
}
}
Редактировать
Почему бы не остановить таймер:
@Override
public void actionPerformed(ActionEvent evt) {
if (i <= 1) {
messageLabel.setText(messages[i++]);
} else {
((Timer)evt.getSource()).stop();
}
}
});