Atualizar data em Programa para desktop

Tenho um Frame com um JInternalFrame que carrega uma telinha com a data(dd/MM/yyyy) e a hora(HH:mm:ss) eu queira que a a hora fosse atualizada a cada segundo.

public void mostrahorario(){
		GridBagConstraints cons = new GridBagConstraints();
		GridBagLayout layout = new GridBagLayout();
		setLayout(layout);

		cons.anchor = GridBagConstraints.CENTER;
		cons.fill = GridBagConstraints.BOTH;
		cons.insets = new Insets(4,4,4,4);

		DateFormat formatdate = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		Date data = new Date();

		JLabel titulodataJL = new JLabel("DATA DO SISTEMA");
		titulodataJL.setFont(new Font(null,Font.BOLD,20));
		JLabel dataJL = new JLabel(formatdate.format(data));
		dataJL.setFont(new Font(null,Font.BOLD,20));
		JLabel nomecontaJL = new JLabel();

		getContentPane().add(titulodataJL, cons);
		cons.gridy = 3;
		getContentPane().add(dataJL, cons);
		cons.gridy = 2;
		getContentPane().add(nomecontaJL,cons);
		cons.gridy = 2;
	}
desktop = new JDesktopPane();
		Container container = getContentPane();
		container.add(desktop, BorderLayout.CENTER);
		desktop.add(telahorario);
		telahorario.setVisible(true);

Grato desde então

A resposta mais simples para seu problema é Threads. Talvez o padrão Observer ajude, pois seria uma das maneiras mais fáceis de atualizar o seu dataJL. Na seção de tutoriais tem uma explicação bem legal sobre Observer (apesar que talvez nem seja necessário, dependendo da situação somente Threads podem resolver).

Só mais uma dica: prefira usar a class Calendar a usar a Date, que já tem vários métodos e construtores deprecated.

cara, o amigo que falou das threads está corretíssimo

porém é uma grande perda de performance vc usar uma thread só fazer um relogio … (a não ser que o seu objetivo seja aprender)

pega na net um relógio feito em flash ou en outra coisa … sei lah … mas um thread só pra fazer um relógio, é jogar memória pela janela rsrs …XD

falows

[quote=sergio_ferraz]Se for usar threads, pode fazer algo semelhante a isso:

public class Sample implements Runnable{

	public void run() {
		
		while(true) {
			Date d = new Date();
			DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
			System.out.println(df.format(d)); //Aqui você atualizaria seu Label
			try { 
				Thread.sleep(1000); 
			}
			catch(InterruptedException e) {
				e.printStackTrace(); 
			}
		}
	}
	public static void main(String [] args) {
		Thread t = new Thread(new Sample());
		t.start();
	}
}

Lembrando que não é garantido que o método run() irá executar sempre à cada 1 segundo, e sim pelo menos à cada 1 segundo.[/quote]
Imagine ter criar um objeto Date e um SimpleDateFormat a cada iteração. O processamento vai parar onde? Crie apenas um, algo como:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Relogio implements Runnable {

	private static final DateFormat FORMATTER = new SimpleDateFormat(
			"dd/MM/yyyy HH:mm:ss");

	@Override
	public void run() {
		Calendar c = Calendar.getInstance();
		while (true) {
			System.out.println(FORMATTER.format(c.getTime()));
			c.set(Calendar.SECOND, c.get(Calendar.SECOND) + 1);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException ex) {
				ex.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		new Thread(new Relogio()).start();
	}

}

Se for usar threads, pode fazer algo semelhante a isso:

public class Sample implements Runnable{

	public void run() {
		
		while(true) {
			Date d = new Date();
			DateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
			System.out.println(df.format(d)); //Aqui você atualizaria seu Label
			try { 
				Thread.sleep(1000); 
			}
			catch(InterruptedException e) {
				e.printStackTrace(); 
			}
		}
	}
	public static void main(String [] args) {
		Thread t = new Thread(new Sample());
		t.start();
	}
}

Lembrando que não é garantido que o método run() irá executar sempre à cada 1 segundo, e sim pelo menos à cada 1 segundo.