Porque esta thread não esta funcionando?

Quero que o for execute o setVisible a cada um segundo


 public void apagar(ArrayList<JLabel> lista){
               JLabel ap = null;
           for(int i = 2; i < 13; i++){
        
            ap = (lista.get(i));
            ap.setVisible(false);

             try
        {
        Thread.sleep(1000); // espera 1 segundo
        }
        catch(InterruptedException e)
        {
        }
            }

Quando eu aperto o botão desta ação , ele demora uns 5 segundos e depois apaga as labels tudo de uma vez e não de uma bbem uma a cada um segundo??

O Swing é meio chatinho com threads. Ele exige que as atualizações de tela sejam feitas na thread principal do Swing, que pode ser acessada usando um método chamado invokeLater.

http://download.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html

Experimente rodar o programa abaixo.

package guj;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ExemploLimparLabels extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JPanel pnlBotoes = null;
    private JButton btnOK = null;
    private JPanel pnlLabels = null;
    private List<JLabel> labels = null;
    private JButton btnCancelar = null;

    private JPanel getPnlBotoes() {
        if (pnlBotoes == null) {
            pnlBotoes = new JPanel();
            pnlBotoes.setLayout(new FlowLayout());
            pnlBotoes.add(getBtnOK(), null);
            pnlBotoes.add(getBtnCancelar(), null);
        }
        return pnlBotoes;
    }

    /**
     * This method initializes btnOK
     * 
     * @return javax.swing.JButton
     */
    private JButton getBtnOK() {
        if (btnOK == null) {
            btnOK = new JButton();
            btnOK.setText("Limpar");
            btnOK.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    btnOK.setEnabled(false);
                    btnCancelar.setEnabled(true);
                    thread = new Thread(new Runnable() {
                        @Override
                        public void run() {
                            for (final JLabel label : labels) {
                                SwingUtilities.invokeLater(new Runnable() {
                                    @Override
                                    public void run() {
                                        // Só pra ficar mais interessante:
                                        if (label.isVisible())
                                            label.setVisible(false);
                                        else
                                            label.setVisible(true);
                                    }
                                });
                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException ex) {
                                    break;
                                }
                            }
                            btnOK.setEnabled(true);
                        }

                    });
                    thread.start();
                }
            });
        }
        return btnOK;
    }

    private JPanel getPnlLabels() {
        if (pnlLabels == null) {
            labels = new ArrayList<JLabel>();
            for (int i = 0; i < 10; ++i) {
                JLabel label = new JLabel();
                label.setText(String.format("Label # %d", i + 1));
                labels.add(label);
            }
            pnlLabels = new JPanel();
            pnlLabels.setLayout(new BoxLayout(getPnlLabels(), BoxLayout.Y_AXIS));
            for (JLabel label : labels) {
                pnlLabels.add(label, null);
            }
        }
        return pnlLabels;
    }

    private JButton getBtnCancelar() {
        if (btnCancelar == null) {
            btnCancelar = new JButton();
            btnCancelar.setText("Cancelar");
            btnCancelar.setEnabled(false);
            btnCancelar.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    btnCancelar.setEnabled(false);
                    thread.interrupt();
                }
            });
        }
        return btnCancelar;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ExemploLimparLabels thisClass = new ExemploLimparLabels();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    public ExemploLimparLabels() {
        super();
        initialize();
    }

    private void initialize() {
        this.setSize(300, 251);
        this.setContentPane(getJContentPane());
        this.setTitle("Limpar Labels com Threads");
    }

    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getPnlLabels(), BorderLayout.CENTER);
            jContentPane.add(getPnlBotoes(), BorderLayout.SOUTH);
        }
        return jContentPane;
    }

    private Thread thread;

}