Horario e data na aplicação sendo vizualizada no title do jframe

3 respostas
L

Boa noite galera!!
Venho solicitar ajuda pra vcs, como coloco horario e data na barra de titulo da minha aplicação
não sei com fazer, mas me parece que é com threads, procurei na net, porém não consegui adaptar nada do que achei, vou postar o exemplo que encontre....

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

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 um timer para atualizar o relógio
        Timer t = new Timer(1000, new ClockAction());
        t.setInitialDelay(0);
        t.setRepeats(true);
        t.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));
    }

    /**
     * Action 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.
     * Roda diretamente na thread da AWT.
     */
    private class ClockAction implements ActionListener {

        public void actionPerformed(ActionEvent e)
        {
            // Só podemos chamar setHora diretamente dessa
            // forma, pois esse Runnable é uma InnerClass não
            // estática.
            setHora(new Date());
        }
    }

    public static void main(String args[]) {
        new MyFrame();
    }
}

Aguardo ajuda de vcs!!
VLW

3 Respostas

M

O exemplo funciona, certo? Só que atualiza a hora no JLabel. Basta fazer com que atualiza no título da janela (setTitle). E para adicionar a data também, uma simples alteração no SimpleDateFormat resolve. Fiz a alteração e removi o que era desnecessário. Ficou assim:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.Timer;

public class MyFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	// Formatador da hora
	private static final DateFormat FORMATO = new SimpleDateFormat(
			"dd/MM/yy - HH:mm:ss");

	public MyFrame() {
		// Construímos nosso frame
		super("Exemplo");
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 75);
		setVisible(true);

		// Iniciamos um timer para atualizar o relógio
		Timer t = new Timer(1000, new ClockAction());
		t.setInitialDelay(0);
		t.setRepeats(true);
		t.start();
	}

	/**
	 * 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) {
		// aqui, ao invés de ajustar a hora no JLabel, você coloca no título da
		// aplicação. Só isso!
		setTitle(FORMATO.format(date));
		// poderia adicionar mais alguma coisa como em:
		// setTitle("Minha Aplicação - " + FORMATO.format(date));
	}

	/**
	 * Action 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. Roda
	 * diretamente na thread da AWT.
	 */
	private class ClockAction implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			// Só podemos chamar setHora diretamente dessa
			// forma, pois esse Runnable é uma InnerClass não
			// estática.
			setHora(new Date());
		}

	}

	public static void main(String args[]) {
		new MyFrame();
	}
}
L

Blz hem mano!!
Vlw mesmo, vou implementar mais tarde!!!
Ate+++

ViniGodoy

Déjà vu.

Criado 6 de janeiro de 2010
Ultima resposta 7 de jan. de 2010
Respostas 3
Participantes 3