Timer... Como usar?

8 respostas
pedroroxd

Pessoal, eu uso NetBeans, e estou precisando fazer um timer…
1- Esse timer vai fazer uma contagem regreciva de 30segundos (de 30 até 0).
2- A contagem regreciva tem que ser mostrada numa jLabel, atualizando de 1 em 1 segundo
3- Quando clicar no botão cancelar, o timer para e volta para 30 segundos.

[color=red]Ps: [/color]Antes que os maliciosos pensem, não é trabalho de escola não :stuck_out_tongue:
*É pq eu fiz isso em delphi, e usava o componente timer, o código ficava simples… Ae resolvi tentar fazer em java…
O código que ficaria dentro do contador seria:

int tempo = 30 tempo := tempo -1; String hihi = new Integer(tempo).toString(); jLabel11.setText(hihi);

Mas não sei como implementar o timer de 1 em 1 segundo… Qualquer ajuda é bem vinda… Valew!

8 Respostas

lina

Oi,

No java existe a classe chamada Timer;

Da uma olhada aqui.: (Tem um pessoal brincando com Timer e tem um exemplo exatamente como você quer)

http://www.guj.com.br/posts/list/35972.java

Tchauzin!

pedroroxd

Pow… Eu rodei o código deles aki, e dá certo…
Só que eu mecho com frame, então não precisa dakilo de criar um frame, criar uma jlabel, setar o tamanho deles e tal…

ViniGodoy
Você tem 3 maneiras de fazer o que você quer:

a) Usar threads direto;

b) Usar o java.util.Timer;

c) Usar o javax.swing.Timer;

Aqui tem um exemplo de cada um deles, que faz exatamente a mesma coisa (confira os também 2 tópicos na página 2):
http://www.guj.com.br/posts/list/52964.java#279083

pedroroxd

Mas nesses dae é pra mostrar as horas… não um contador de segundo…
Na verdade o que ele faz é pegar a hora do sistema…
Mas mesmo assim vo tentar entender a sintaxe e fazer aqui…
Por enquanto… Não Resolvido

lina

Oi,

Faz o seguinte. Tente adaptar o que o pessoal fez para seu exemplo… Post seu código quando necessário e quando existir dúvidas que nós o ajudamos!

Tchauzin!

ViniGodoy

Naqueles exemplos, bastaria você alterar a função setHora para, ao invés de mostrar as horas, diminuirem de um contador e exibi-lo na tela.

Suellen_Susu

Vini, vc teria como me ajudar?

fiz um timer, como mostra o código abaixo:

public class tempo4 extends javax.swing.JFrame {
    DateFormat dateFormat;      
    Calendar calendar;       
    Timer timer; 
    boolean janela = true;
    /** Creates new form tempo4 */
    public tempo4() {
        this.dateFormat = new SimpleDateFormat("HH:mm:ss");   
        this.calendar = Calendar.getInstance();   
        this.calendar.set(Calendar.MILLISECOND, 0);   
        this.calendar.set(Calendar.SECOND, 0);   
        this.calendar.set(Calendar.MINUTE, 0);   
        this.calendar.set(Calendar.HOUR_OF_DAY, 0);                     
        this.initialize(); 
        initComponents();
    }
    protected void initialize() {   
        this.add(this.getLabel());    
        this.go();   
    }   
  
    public JLabel getLabel() {   
        if (this.jLabel1 == null) {   
            this.jLabel1 = new JLabel(getTime());   
            //this.label.setPreferredSize(new Dimension(100, 22));   
        }   
        return this.jLabel1;   
    }
    
    public void go() {   
        ActionListener action = new ActionListener() {   
            public void actionPerformed(ActionEvent e) {   
                jLabel1.setText(getTime());   
            }
        };   
        this.timer = new Timer(1000, action);   
        this.timer.start();   
    }   
  
    public String getTime() {   
        this.calendar.add(Calendar.SECOND, 1);   
        return this.dateFormat.format(this.calendar.getTime());   
    }   
	
	//abaixo os métodos dos botoes
	
	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        if (!timer.isRunning()) {   
            timer.start();          
    }
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        if (timer.isRunning()) {   
            timer.stop();   
         } 
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        this.dispose();
        JOptionPane.showMessageDialog(null, "Você irá para a próxima janela!");
        new tempo4().setVisible(true);
    }

Só q é o seguinte: ao clikar no 3jButton, ele fecha minha janela, e apos a mensagem, chama ela d novo....

Só q eu queria q ao abrir a janela d novo, ele continuasse o timer, com o tempo q ele parou antes, e não q reiniciasse a cada vez q abrir a janela d novo...

tem como fazer isso?

Obrigada... ;D

celsonery

Suellen,

Vc ja tentou trocar o .dispose por .hide?

Criado 8 de setembro de 2009
Ultima resposta 29 de nov. de 2013
Respostas 8
Participantes 5