Pessoal, estou tentando inserir a data dinamicamente num JTextfield que ficara no cabeçalho de um JFrame, como faço.
Quando falo dinamicamente é que a data e a hora vai mudar dinamicamente, sendo atualizado contando cada minuto ou segundo.
Espero que alguem possa me ajudar…
Inserir o valor da data dinamicamente num JTextfield
6 Respostas
Hum… eu não conheço nada pronto pra fazer isso não…
Eu faria com um laço infinito rodando dentro de uma Thread, mas não sei se este seria o método mais indicado…
Faz uma classe separada que recebe uma referência ao JFrame e que possui um laço infinito, dentro do qual ele atualiza o título da janela conforme o horário do sistema muda… Você pode pegar isso através de um objeto da classe Date. A cada execução do laço vc pode pegar a hora, minuto, segundo, etc. Mas esse laço deve estar dentro de uma Thread, caso contrário seu programa não iria fazer mais nada além de ficar pegando as horas… eheheh
Vc coloca esse laço dentro do run() da Thread (ou faz uma classe que implementa a interface Runnable).
Dá uma pesquisada, mas a idéia é essa 
Falou!
Tudo bem eu crio a thread, mas depois como envio o valor para o TextField?
Então, faz uma classe separada que extenda Thread, implemente Runnable ou qualquer coisa do tipo e coloca este esquema de buscar a data dentro dela. Faz com que construtor desta classe receba uma refrência para o JFrame. A thread pega a data e faz, por exemplo, Frame.setTitle(“seu titulo” + + data).
Dai na classe onde vc extende JFrame (é JFrame que vc está usando?) vc declara um objeto dessa classe que citei acima, dá um new nele passando SeuFrame.this como argumento. Põe este objeto pra rodar, dando um start() ou algo assim e tá feito… Pode fazer isso dentro do método construtor do Frame…
Falou… 
Ola Cassio, eu criei a seguinte classe :
class Hora extends Thread
{
Calendar calendario;
public void run()
{
while(true)
{
calendario = Calendar.getInstance();
int hora = calendario.get(Calendar.HOUR);
int minutos = calendario.get(Calendar.MINUTE);
int segundos = calendario.get(Calendar.SECOND);
}
}
}
E chamo pela classe:
public class Data extends JFrame
{
JTextField field;
public Data()
{
Thread t = new Thread(r);
t.start();
getContentPane().setLayout(null);
setSize(400,400);
setTitle("teste");
field = new JTextField();
field.setBounds(50,20,80,20);
field.setText( /* COMO PASSO O VALO AQUI */ ;
getContentPane().add(field);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Data().setVisible(true);
}
});
}
}
Amigo, como eu passaria o parametro para esta ulitma classe:
Acho que também a classe javax.swing.Timer pode ajudar, olha só um reloginho que fiz aqui:
package teste.guj;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
public class TesteRelogio extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
JLabel relogio;
Date agora;
SimpleDateFormat sdf;
public TesteRelogio() {
super();
setTitle(getClass().toString());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
agora = new Date();
sdf = new SimpleDateFormat("HH:mm:ss");
relogio = new JLabel(sdf.format(agora));
getContentPane().add(relogio);
pack();
Timer timer = new Timer(1000, this);
timer.setRepeats(true);
timer.start();
}
public static void main(String[] args) {
new TesteRelogio().setVisible(true);
}
public void actionPerformed(ActionEvent e) {
agora.setTime(System.currentTimeMillis());
relogio.setText(sdf.format(agora));
}
}
Acho que fica mais simples nesse caso...
flw
Valeu amigo pela ajuda…