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.
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
[code]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();
}
}
}[/code]
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!
[quote=ajfilho]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
[code]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();
}
}
}[/code]
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![/quote]
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!
[quote=ajfilho]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![/quote]
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:
[code]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();
}
}[/code]
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);
}
});
}
}
[quote=bucha]Bom dia!
atualizando o tópico.
Criando a classe:
[code]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();
}
}[/code]
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!!!