Olá pessoal, estou fazendo uma aplicação bem simples, e gostaria que nela tivesse um relógio, não precisa ser necesariamente um relógio desenhado eheh, mas pode ser apenas o dia, mes, ano, hora, minuto e segundo (setados em um field ou label), mas eu gostaria que ficasse marcando a hora certinha, conforme a hora do sistema. pensei em fazer com thread mas não sei se seria somente isso. alguem sabe alguma coisa a respeito disso?
obrigado.
Como colocar um relógio no sistema? (RESOLVIDO)
17 Respostas
Bom, vou te mostrar como faço para rodar aqui nos meu programas. Deve ter jeito melhor de fazer, mas esse funciona:
Primeiro crio uma classe AtualizadorHorario
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JLabel;
/**
*
* @author AJFILHO
*/
public class AtualizadorHorario extends Thread {
private JLabel hr;
private boolean mostrarData;
public AtualizadorHorario(JLabel hora) {
this.hr = hora;
}
public void mostrarData(boolean mostrar) {
if (mostrar) {
this.mostrarData = true;
} else {
this.mostrarData = false;
}
}
@Override
public void run() {
try {
while (true) {
Date d = new Date();
StringBuffer data = new StringBuffer();
if (mostrarData) {
SimpleDateFormat sdfData = new SimpleDateFormat("dd.MM.yyyy");
data.append(sdfData.format(d));
data.append(" - ");
}
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
this.hr.setText(data.toString() + sdf.format(d));
Thread.sleep(1000);
this.hr.revalidate();
}
} catch (InterruptedException ex) {
System.out.println("Problema na atualização da data/hora");
ex.printStackTrace();
}
}
}
Depois dentro da classe que terão os componentes swings eu crio um metodo para mostrar essa hora:
public void mostrarHora() {
AtualizadorHorario ah = new AtualizadorHorario(labelHora);
ah.mostrarData(true);
Thread thHora = ah;
thHora.start();
}
Finalmente chamo esse método dentro do construtor da classe e rodo!
Abraços!
Se quiser uma sugestão, é preferível implementar Runnable a estender Thread. Mas parabéns pelo programa.
Realmente eu já tinha lido sobre isso, mas esse código é meio antigo.
Obrigado mesmo assim pelo conselho!
Abraços!
Bom, vou te mostrar como faço para rodar aqui nos meu programas. Deve ter jeito melhor de fazer, mas esse funciona:Primeiro crio uma classe AtualizadorHorario
import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JLabel; /** * * @author AJFILHO */ public class AtualizadorHorario extends Thread { private JLabel hr; private boolean mostrarData; public AtualizadorHorario(JLabel hora) { this.hr = hora; } public void mostrarData(boolean mostrar) { if (mostrar) { this.mostrarData = true; } else { this.mostrarData = false; } } @Override public void run() { try { while (true) { Date d = new Date(); StringBuffer data = new StringBuffer(); if (mostrarData) { SimpleDateFormat sdfData = new SimpleDateFormat("dd.MM.yyyy"); data.append(sdfData.format(d)); data.append(" - "); } SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); this.hr.setText(data.toString() + sdf.format(d)); Thread.sleep(1000); this.hr.revalidate(); } } catch (InterruptedException ex) { System.out.println("Problema na atualização da data/hora"); ex.printStackTrace(); } } }Depois dentro da classe que terão os componentes swings eu crio um metodo para mostrar essa hora:
public void mostrarHora() { AtualizadorHorario ah = new AtualizadorHorario(labelHora); ah.mostrarData(true); Thread thHora = ah; thHora.start(); }Finalmente chamo esse método dentro do construtor da classe e rodo!
Abraços!
Aew. vlww pelas dicas, etendi com faz, mas ta dando um errinho:
Exception in thread "Thread-2" java.lang.NullPointerException
at util.AtualizadorHorario.run(AtualizadorHorario.java:40)
mas vou corrigir ele, vou ver qual é hehe
vlww!
é, ainda ta dando erro hehe :
Exception in thread “Thread-2” java.lang.NullPointerException
at util.AtualizadorHorario.run(AtualizadorHorario.java:40)
Dá um refresh ou um clean no teu projeto e rode novamente!.
Aqui roda tranquilamente!
Posta como tu estás chamando o método para mostrar a hora!
Abraços!
Dá um refresh ou um clean no teu projeto e rode novamente!.Aqui roda tranquilamente!
Posta como tu estás chamando o método para mostrar a hora!
Abraços!
Vlw Ajfilho!!
deu certo, o problema era o seguinte, eu tinha um método que era executado no construtor, daí eu chamei o AtualizadorHorario dentro desse oturo método, e não diretamente no construtor, daí deu erro, mas quando eu chamei o AtualizadorHorario dentro do contrutor direto, deu certo!!!
eheh
Obrigado! era isso mesmo que eu queria!!
vlw!
Beleza parceiro.
Precisando, estamos aí!
Abraços!
Talvez voce crio o atualizador antes de criar o label.
Eu tinha chamado o método dentro de outro método, e não podia, ehhee , tinha que chamar direto do construtor 
agora deu certo ehehhe
mas valeu !!
Prezado
Tentei implementar o referido código em uma agenda que estrou fazendo, e a hora não saiu no jtextfield. Eu teria que criar um construtor Atualizadorhorario. Teria mais alguma dica? Gostaria que minha data aparecesse e ela não aparecesse.
bem deveria sair num jlabel.
para mim funcionou bem, segue o tópico que pretendo aplicar.
Bom dia!
atualizando o tópico.
Criando a classe:
package br.teste.domain;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTextField;
public class AtualizadorHorario {
public static void start(final JTextField textFieldHorario){
Thread atualizaHora = new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
Date date = new Date();
StringBuffer data = new StringBuffer();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // Para Atualizar a DATA so mudar para o formato dd/MM/yyyy
textFieldHorario.setText(data.toString() + sdf.format(date));
Thread.sleep(1000);
textFieldHorario.revalidate();
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
});
atualizaHora.start();
}
}
depois dentro da Classe onde terá os componentes Swing(JFrame por exemplo):
AtualizadorHorario.start(textFieldHorario);
Fiz um pequeno exemplo aqui… espero que ajude …
class MyTime extends Observable implements Runnable {
private String horas;
public MyTime(Observer obs) {
this.addObserver(obs);
}
@Override
public void notifyObservers() {
super.setChanged();
super.notifyObservers();
}
@Override
public void run() {
while(true){
this.horas = new SimpleDateFormat("dd/MM/yyyy - HH:mm:ss").format(Calendar.getInstance().getTime());
this.notifyObservers();
}
}
public String getHoras() {
return horas;
}
}
class MyJFrame extends JFrame implements Observer {
private JLabel label;
public MyJFrame() {
init();
}
private void init() {
setTitle("Relógio");
setSize(255, 80);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
configComponent();
startRelogio();
}
private void configComponent() {
label = new JLabel();
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font("Tahoma", 1, 20));
this.getContentPane().add(label, BorderLayout.CENTER);
}
private void startRelogio() {
new Thread(new MyTime(this)).start();
}
@Override
public void update(Observable o, Object arg) {
MyTime time = (MyTime)o;
this.label.setText(time.getHoras());
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run(){
new MyJFrame().setVisible(true);
}
});
}
}
Bom dia!atualizando o tópico.
Criando a classe:
package br.teste.domain; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JTextField; public class AtualizadorHorario { public static void start(final JTextField textFieldHorario){ Thread atualizaHora = new Thread(new Runnable() { @Override public void run() { try { while (true) { Date date = new Date(); StringBuffer data = new StringBuffer(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // Para Atualizar a DATA so mudar para o formato dd/MM/yyyy textFieldHorario.setText(data.toString() + sdf.format(date)); Thread.sleep(1000); textFieldHorario.revalidate(); } } catch (InterruptedException ex) { ex.printStackTrace(); } } }); atualizaHora.start(); } }depois dentro da Classe onde terá os componentes Swing(JFrame por exemplo):
AtualizadorHorario.start(textFieldHorario);
O MUNDO TEM QUE VER ESTE CÓDIGO ! PROCUREI POR 2 DIAS, ESTUDEI DEZENAS DE EXEMPLOS, + SÓ ESSE RESOLVEU ! VLW CARA !!!
Que bom ter ajudado!
[]'s
E como se aplica esse esquema de relógio em um JFrame?
Tipo eu gostaria de colocar o relógio e data aparecendo no menu que inicializa o sistema, até tenho um método aqui mas não consigo inserir ele no menu, ele se inicia como um JFrame separado e fica muito toscão.
Por favor ajudem!!!