Cronometro regressivo

Olá pessoal, por favor estou precisando de uma força para fazer um contador regressivo de uma data fixa, começando da data atual.

Preciso de um contador de segundos, minutos, horas e dias, mas o total

ex: dias=1430
horas=34325
minutos=2059500
segundos=123570054

e eu só estou conseguindo assim: 335:05:04:54

Agradeço desde já!!!

import java.awt.EventQueue;  
import java.awt.FlowLayout;  
import java.text.DateFormat;  
import java.text.SimpleDateFormat;  
import java.util.Date;
import java.util.GregorianCalendar; 

import java.text.ParseException; 
  
import java.util.Date;   
  
import javax.swing.JFrame;  
import javax.swing.JLabel;  
  
public class MyFrame extends JFrame {  
    // Local onde atualizaremos a hora  
    private JLabel lblHora; 
	  
  
    // Formatador da hora  
    private static final DateFormat FORMATO = new SimpleDateFormat("HH:mm:ss");  
  

    public MyFrame() {  
        // Construímos nosso frame  
        super("Exemplo");  
        setLayout(new FlowLayout());  
        getContentPane().add(getLblHora());  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        setSize(200, 75);  
        setVisible(true);  
  
        // Iniciamos a thread do relógio. Tornei uma deamon thread para que seja  
        // automaticamente finalizada caso a aplicação feche.  
        Thread clockThread = new Thread(new ClockRunnable(), "Clock thread");  
        clockThread.setDaemon(true);  
        clockThread.start();  
    }  
  
    private JLabel getLblHora() {  
        if (lblHora == null) {  
            lblHora = new JLabel();  
        }  
        return lblHora;  
    }  
  
    /** 
     * Método para atualizar a hora no formulário. Não é thread-safe, portanto, 
     * se o utilizado fora da thread da AWT, deve-se utilizar um dos comandos da 
     * EventQueue (invokeLater ou invokeAndWait). 
     */  
    public void setHora(Date date) {  
       // getLblHora().setText(FORMATO.format(date));
		 String T2= "07/06/2014"; 
		 
		 GregorianCalendar calendar = new GregorianCalendar(); 
 date = calendar.getTime();

SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy"); 
formatador.format(date); 
 Date d2 = new Date();
try{ 
d2 = formatador.parse(T2); }
catch(ParseException pe) {}


long dias = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(dias));
long horas = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(horas));
long min = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(min));
long seg = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(seg));


     
  }
    /** 
     * Runnable que contém o código que atuará na nossa thread. Basicamente, ele 
     * chama o método setHora de segundo em segundo, passando a data atual. 
     */  
    private class ClockRunnable implements Runnable {  
        public void run() {  
            try {  
                while (true) {  
                    // Aqui chamamos o setHora através da EventQueue da AWT.  
                    // Conforme dito, isso garante Thread safety para o Swing.  
                    EventQueue.invokeLater(new Runnable() {  
                        public void run() {  
                            // Só podemos chamar setHora diretamente dessa  
                            // forma, pois esse Runnable é uma InnerClass não  
                            // estática.  
                            setHora(new Date());  
                        }  
                    });  
                    // Fazemos nossa thread dormir por um segundo, liberando o  
                    // processador para outras threads processarem.  
                    Thread.sleep(1000);  
                }  
            }  
            catch (InterruptedException e) {  
            }  
        }  
    }  
  
    public static void main(String args[]) {  
        new MyFrame();  
    }  
}  

Qual a dúvida?