Cronometro

35 respostas
paulofernandesjr

Olá pessoal.

Ontem a noite em casa criei um programinha simples que é um cronometro.

Estava muito cansado, ai resolvi abrir o netneans e desenhar o layout, peço que não olhem essa parte do código.

Eu sei que é bem simples o projeto, mas creio que seja muito útil para aprender alguma coisinha.

Gostaria de saber quais tipos de melhorias você fariam no programa e porque? Tipo a questão da performance, etc.!

Abaixo seguem os códigos.

PrincipalTela.java
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class PrincipalTela extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private static boolean contador = false;
	private static boolean zerado = false;
    private JButton iniciar;
    private static JLabel lConta;
    private JPanel mainPanel;
    private JButton pausar;
    private JButton zerar;

	public static void main(String[] args) {
		new PrincipalTela().montaTela();
		Contador cont = new Contador(lConta);
		cont.start();
	}
	
	private void montaTela(){
		this.setTitle("Cronometro");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(240, 120);
		
        mainPanel = new javax.swing.JPanel();
        lConta = new javax.swing.JLabel();
        iniciar = new javax.swing.JButton();
        pausar = new javax.swing.JButton();
        zerar = new javax.swing.JButton();

        mainPanel.setName("mainPanel"); // NOI18N

        lConta.setText("00:00:00"); // NOI18N
        lConta.setName("lConta"); // NOI18N

        iniciar.setText(">"); // NOI18N
        iniciar.setName("iniciar"); // NOI18N
        iniciar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                iniciarActionPerformed(evt);
            }
        });

        pausar.setText("ii"); // NOI18N
        pausar.setName("pausar"); // NOI18N
        pausar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pausarActionPerformed(evt);
            }
        });

        zerar.setText("zerar"); // NOI18N
        zerar.setName("zerar"); // NOI18N
        zerar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zerarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lConta, javax.swing.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE)
                    .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(iniciar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
                        .addComponent(pausar)
                        .addGap(32, 32, 32)
                        .addComponent(zerar)))
                .addContainerGap())
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lConta)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(iniciar)
                    .addComponent(zerar)
                    .addComponent(pausar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        this.add(mainPanel);
        this.setVisible(true);
	}

    private void iniciarActionPerformed(ActionEvent evt) {
        contador = true;
        iniciar.setEnabled(false);
        pausar.setEnabled(true);
        zerar.setEnabled(false);
    }

    private void pausarActionPerformed(ActionEvent evt) {
    	contador = false;
        iniciar.setEnabled(true);
        pausar.setEnabled(false);
        zerar.setEnabled(true);
    }

    private void zerarActionPerformed(ActionEvent evt) {
    	contador = false;
    	lConta.setText("00:00:00");
    	zerado = true;
    	lConta.revalidate();
        iniciar.setEnabled(true);
        pausar.setEnabled(false);
    }

	
	public static boolean isContador(){
		return contador;
	}

	public static boolean isZerado(){
		return zerado;
	}
	
	public static void setZerado(boolean zero){
		zerado = zero;
	}
	
	
}
Contador.java
import javax.swing.JLabel;

public class Contador extends Thread {

    private JLabel hr;

    public Contador(JLabel hora) {
        this.hr = hora;
    }

    @Override
    public void run() {
       try {
    	   int segundo = 0;
           int hora = 0;
           int minuto = 0;
           while( true ) {
        	   Thread.sleep(1000);
        	   if( PrincipalTela.isContador() ) {
        		   if( PrincipalTela.isZerado() ) {
        			   segundo = 0;
        	           hora = 0;
        	           minuto = 0;
        	           PrincipalTela.setZerado(false);
        		   }
        		   segundo++;
        		   
	               if( segundo > 59 ){
	                   segundo = 00;
	                   minuto = minuto+1;
	               }
	
	               if( minuto == 59 ){
	                   minuto = 00;
	                   hora = hora+1;
	               }
	               
	               String timer = completaComZero(hora) + ":" +
	                              completaComZero(minuto) + ":" +
	                              completaComZero(segundo);
	               this.hr.setText(timer);
	               this.hr.revalidate();
        	   }
           }
       } catch (InterruptedException ex) {
           ex.printStackTrace();
       }
    }

    private String completaComZero(Integer i) {
        String retorno = null;
        if( i < 10 ) {
            retorno = "0"+i;
        } else {
            retorno = i.toString();
        }
        return retorno;
    }

}

35 Respostas

Suellen_Susu
paulofernandesjr:
Olá pessoal.

Ontem a noite em casa criei um programinha simples que é um cronometro.

Estava muito cansado, ai resolvi abrir o netneans e desenhar o layout, peço que não olhem essa parte do código.

Eu sei que é bem simples o projeto, mas creio que seja muito útil para aprender alguma coisinha.

Gostaria de saber quais tipos de melhorias você fariam no programa e porque? Tipo a questão da performance, etc.!

Abaixo seguem os códigos.

PrincipalTela.java
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class PrincipalTela extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private static boolean contador = false;
	private static boolean zerado = false;
    private JButton iniciar;
    private static JLabel lConta;
    private JPanel mainPanel;
    private JButton pausar;
    private JButton zerar;

	public static void main(String[] args) {
		new PrincipalTela().montaTela();
		Contador cont = new Contador(lConta);
		cont.start();
	}
	
	private void montaTela(){
		this.setTitle("Cronometro");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(240, 120);
		
        mainPanel = new javax.swing.JPanel();
        lConta = new javax.swing.JLabel();
        iniciar = new javax.swing.JButton();
        pausar = new javax.swing.JButton();
        zerar = new javax.swing.JButton();

        mainPanel.setName("mainPanel"); // NOI18N

        lConta.setText("00:00:00"); // NOI18N
        lConta.setName("lConta"); // NOI18N

        iniciar.setText(">"); // NOI18N
        iniciar.setName("iniciar"); // NOI18N
        iniciar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                iniciarActionPerformed(evt);
            }
        });

        pausar.setText("ii"); // NOI18N
        pausar.setName("pausar"); // NOI18N
        pausar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pausarActionPerformed(evt);
            }
        });

        zerar.setText("zerar"); // NOI18N
        zerar.setName("zerar"); // NOI18N
        zerar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zerarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lConta, javax.swing.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE)
                    .addGroup(mainPanelLayout.createSequentialGroup()
                        .addComponent(iniciar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)
                        .addComponent(pausar)
                        .addGap(32, 32, 32)
                        .addComponent(zerar)))
                .addContainerGap())
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lConta)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(iniciar)
                    .addComponent(zerar)
                    .addComponent(pausar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        this.add(mainPanel);
        this.setVisible(true);
	}

    private void iniciarActionPerformed(ActionEvent evt) {
        contador = true;
        iniciar.setEnabled(false);
        pausar.setEnabled(true);
        zerar.setEnabled(false);
    }

    private void pausarActionPerformed(ActionEvent evt) {
    	contador = false;
        iniciar.setEnabled(true);
        pausar.setEnabled(false);
        zerar.setEnabled(true);
    }

    private void zerarActionPerformed(ActionEvent evt) {
    	contador = false;
    	lConta.setText("00:00:00");
    	zerado = true;
    	lConta.revalidate();
        iniciar.setEnabled(true);
        pausar.setEnabled(false);
    }

	
	public static boolean isContador(){
		return contador;
	}

	public static boolean isZerado(){
		return zerado;
	}
	
	public static void setZerado(boolean zero){
		zerado = zero;
	}
	
	
}
Contador.java
import javax.swing.JLabel;

public class Contador extends Thread {

    private JLabel hr;

    public Contador(JLabel hora) {
        this.hr = hora;
    }

    @Override
    public void run() {
       try {
    	   int segundo = 0;
           int hora = 0;
           int minuto = 0;
           while( true ) {
        	   if( PrincipalTela.isContador() ) {
        		   if( PrincipalTela.isZerado() ) {
        			   segundo = 0;
        	           hora = 0;
        	           minuto = 0;
        	           PrincipalTela.setZerado(false);
        		   }
        		   
	               if( segundo == 59 ){
	                   segundo = 00;
	                   minuto = minuto+1;
	               }
	
	               if( minuto == 59 ){
	                   minuto = 00;
	                   hora = hora+1;
	               }
	               segundo++;
	               String timer = completaComZero(hora) + ":" +
	                              completaComZero(minuto) + ":" +
	                              completaComZero(segundo);
	               this.hr.setText(timer);
	               this.hr.revalidate();
        	   }
        	   Thread.sleep(1000);
           }
       } catch (InterruptedException ex) {
           ex.printStackTrace();
       }
    }

    private String completaComZero(Integer i) {
        String retorno = null;
        if( i < 10 ) {
            retorno = "0"+i;
        } else {
            retorno = i.toString();
        }
        return retorno;
    }

}

Olá paulofernandesjr, amei seu código!!! só q qria t pedir um favor:

qria fazer a junção do código do cronometro, diret com os componentes gráficos do NetBeans 6.1, e criar um .jar dele.... pq vou utilizar esse código como teste, e depois implementa-lo em outro lugar....

tem como fazer esse junção, e criar este .jar?

bjosssss e mto Obrigada desde jah!!!!

paulofernandesjr

isso é totalmente possível de ser feito

pode fazer isso sim, apenas mantenha os créditos

Suellen_Susu

paulofernandesjr:
isso é totalmente possível de ser feito

pode fazer isso sim, apenas mantenha os créditos

éh q vc sabe como é iniciante!!! to desde de segunda tentando fazer isso e ñ consigo!!!

ñ tem como vc me ajudar!!!

bjosss e obrigada!!!

bRadoCk

paulo muito interessante seu codigo, sou iniciante tb em java vou dar uma estudada depois posto alguma coisa assim, e otima ideia nunca vi ng ter a ideia de montar um cronomero :-o .

Parabens.

paulofernandesjr

Suellen_Susu:
paulofernandesjr:
isso é totalmente possível de ser feito

pode fazer isso sim, apenas mantenha os créditos

éh q vc sabe como é iniciante!!! to desde de segunda tentando fazer isso e ñ consigo!!!

ñ tem como vc me ajudar!!!

bjosss e obrigada!!!

Qual a sua real dúvida?

bRadoCk, valeu :slight_smile:

G

Suellen_Susu:
paulofernandesjr:
isso é totalmente possível de ser feito

pode fazer isso sim, apenas mantenha os créditos

éh q vc sabe como é iniciante!!! to desde de segunda tentando fazer isso e ñ consigo!!!

ñ tem como vc me ajudar!!!

bjosss e obrigada!!!

Que tal já que você tem o codigo dele como base você não tentar mais em vez de pedir ele pra ele te passar a codificação pronta, apresente duvidas e se quiser eu tiro, pois se você não fazer esse codigo você não vai aprender o funcionamento dele e se necessitar de manutenção?

Suellen_Susu

paulofernandesjr:
Suellen_Susu:
paulofernandesjr:
isso é totalmente possível de ser feito

pode fazer isso sim, apenas mantenha os créditos

éh q vc sabe como é iniciante!!! to desde de segunda tentando fazer isso e ñ consigo!!!

ñ tem como vc me ajudar!!!

bjosss e obrigada!!!

Qual a sua real dúvida?

bRadoCk, valeu :)

Eu ñ consegui relacionar (no caso, unir) os dois códigos (Contador e PrincipalTela) em um único jFrame, para transformá-lo em .jar…

isso q ñ consigo fazer…

Suellen_Susu

guialeixo:
Suellen_Susu:
paulofernandesjr:
isso é totalmente possível de ser feito

pode fazer isso sim, apenas mantenha os créditos

éh q vc sabe como é iniciante!!! to desde de segunda tentando fazer isso e ñ consigo!!!

ñ tem como vc me ajudar!!!

bjosss e obrigada!!!

Que tal já que você tem o codigo dele como base você não tentar mais em vez de pedir ele pra ele te passar a codificação pronta, apresente duvidas e se quiser eu tiro, pois se você não fazer esse codigo você não vai aprender o funcionamento dele e se necessitar de manutenção?

Não, não é q eu não tenha entendido o código dele… entendi sim, pois ele fez d forma mto didática… eu só pedi a ajuda dele, pois jah tentei de n jeitos (uma coisa q eu sei q é facil), mas q ñ consegui fazer… Eu entendi o código dele, mas ñ consigo modifica-lo para o q eu penso…

E outra, jamais pedi o código pronto a ele, estou apenas tentando tirar uma duvida minha, pois ñ sei realmente o q fazer…

G

o contador você vai chama-lo no seu PrincipalTela e você faz um projeto com as duas classes e da um build jar disso e pronto.
no codigo do cara o contador ja ta sendo chamado no PrincipalTela

Suellen_Susu

guialeixo:
o contador você vai chama-lo no seu PrincipalTela e você faz um projeto com as duas classes e da um build jar disso e pronto.
no codigo do cara o contador ja ta sendo chamado no PrincipalTela

Pergunta de ignorante agora: o q seria um build jar? :frowning:

G

http://www.google.com.br/search?hl=pt-BR&source=hp&q=como+fazer+um+build+jar&aq=f&aqi=&aql=&oq=&gs_rfai=

http://java.sun.com/developer/Books/javaprogramming/JAR/basics/build.html

dica começa a estudar uma vez me disseram que a maior qualidade de um programador é sevirou.

bRadoCk

Igual meu chefe fala, aquele famoso japones: Tivira

Suellen_Susu

Bom saber q o fórum de java existe para falar ao nosso próximo “se vira”, ao invés de cobrir seu real objetivo, q é o de ajudar e ser ajudado…

G

Bom saber q o fórum de java existe para falar ao nosso próximo “se vira”, ao invés de cobrir seu real objetivo, q é o de ajudar e ser ajudado…

o forum java serve pra tirar duvidas e não pros outros fazerem o codigo pra gente.

Suellen_Susu

Bom saber q o fórum de java existe para falar ao nosso próximo “se vira”, ao invés de cobrir seu real objetivo, q é o de ajudar e ser ajudado…

o forum java serve pra tirar duvidas e não pros outros fazerem o codigo pra gente.

Concordo plenamente, ainda mais qndo isso ocorre com educação, e ñ com indelicadeza…

paulofernandesjr

Calma pessoal!

Muita calma!

Build jar é criar o arquivo jar :slight_smile:

Se você estiver no eclipse é o famoso exportar

o código que fiz agora que fui ver está errado, já arrumei no primeiro post. :slight_smile:

mas então, o que você quer fazer no fim das contas:
1- incorporar ao seu código o contador
2- ao abrir seu programa, abrir um “pop-up/modal” com o cronometro
3- ou o que?

G

Bom saber q o fórum de java existe para falar ao nosso próximo “se vira”, ao invés de cobrir seu real objetivo, q é o de ajudar e ser ajudado…

o forum java serve pra tirar duvidas e não pros outros fazerem o codigo pra gente.

Concordo plenamente, ainda mais qndo isso ocorre com educação, e ñ com indelicadeza…

Da mesma forma de quem ta sendo ajudado realmente queira correr atras e não achar uma forma facil de achar alguem pra fazer suas coisas, se acha que fui indelicado chega em um chefe seu e pergunta como fazer aquilo que ele ja te passou mastigado, dai você vai ver o que é indelicadeza.

Olha nem programar em java eu programo, participo do forum para tentar ajudar e tentar me manter atualizado, programa em Natural, 9 meses que não sei o que é um eclipse instalado na minha maquina,so to te falando pra voce se virar por que no ambiente de trabalho vc vai ser cobrada a isso

Suellen_Susu

paulofernandesjr:
Calma pessoal!

Muita calma!

Build jar é criar o arquivo jar :slight_smile:

Se você estiver no eclipse é o famoso exportar

o código que fiz agora que fui ver está errado, já arrumei no primeiro post. :slight_smile:

mas então, o que você quer fazer no fim das contas:
1- incorporar ao seu código o contador
2- ao abrir seu programa, abrir um “pop-up/modal” com o cronometro
3- ou o que?

Obrigada paulofernandesjr por me responder, é q como ñ entendo bm ingles, nunca tinha ouvido falar no termo Build jar, para se referir ao .jar…

Mas entao, o q qro realmente se enquadra melhor na 1º opção…

Suellen_Susu

Olha, dessa vez acho q vai dar certo, pois deu apenas um erro, q creio q algum de vcs deve saber...

vou postar o primeiro código referente a PrincipalTela, e o segundo referente a Contador, e vou explicar onde esta dando erro (ambos no NetBeans):

package timer;   
import javax.swing.JOptionPane;
  
public class PrincipalTela extends javax.swing.JFrame { 
    private static final long serialVersionUID = 1L;      
    private static boolean contador = false;   
    private static boolean zerado = false;   
    
      public PrincipalTela() {
        initComponents();
    }
     public static boolean isContador(){   
        return contador;   
    }   
  
    public static boolean isZerado(){   
        return zerado;   
    }   
       
    public static void setZerado(boolean zero){   
        zerado = zero;   
    }   
       
       private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        contador = true;   
        iniciar.setEnabled(false);   
        pausar.setEnabled(true);   
        zerar.setEnabled(false);   
    }

    private void pausarActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        contador = false;   
        iniciar.setEnabled(true);   
        pausar.setEnabled(false);   
        zerar.setEnabled(true); 
    }

    private void zerarActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        contador = false;   
        lConta.setText("00:00:00");   
        zerado = true;   
        lConta.revalidate();   
        iniciar.setEnabled(true);   
        pausar.setEnabled(false);   
    }

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        this.dispose();
        JOptionPane.showMessageDialog(null, "próxima janela!");
        new PrincipalTela().setVisible(true);
    }
    
       public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PrincipalTela().setVisible(true);
                Contador cont = new Contador(lConta);   
                cont.start(); 
            }
        });
    }
Contador
package timer;
import javax.swing.JLabel;   

public class Contador extends Thread{

    
    private JLabel hr;   
  
    public Contador(JLabel hora) {   
        this.hr = hora;   
    }

    @Override   
    public void run() {   
       try {   
           int segundo = 0;   
           int hora = 0;   
           int minuto = 0;   
           while( true ) {   
               if( PrincipalTela.isContador() ) {   
                   if( PrincipalTela.isZerado() ) {   
                       segundo = 0;   
                       hora = 0;   
                       minuto = 0;   
                       PrincipalTela.setZerado(false);   
                   }   
                     
                   if( segundo == 59 ){   
                       segundo = 00;   
                       minuto = minuto+1;   
                   }   
       
                   if( minuto == 59 ){   
                       minuto = 00;   
                       hora = hora+1;   
                   }   
                   segundo++;   
                   String timer = completaComZero(hora) + ":" +   
                                  completaComZero(minuto) + ":" +   
                                  completaComZero(segundo);   
                   this.hr.setText(timer);   
                   this.hr.revalidate();   
               }   
               Thread.sleep(1000);   
           }   
       } catch (InterruptedException ex) {   
           ex.printStackTrace();   
       }   
    }   
  
    private String completaComZero(Integer i) {   
        String retorno = null;   
        if( i < 10 ) {   
            retorno = "0"+i;   
        } else {   
            retorno = i.toString();   
        }   
        return retorno;   
    }      
    
}

Reparem q um trecho do PrincipalTela.java, do código do paulo, esta assim:

public static void main(String[] args) {   
        new PrincipalTela().montaTela();   
        Contador cont = new Contador(lConta);   
        cont.start();   
    }

e do meu PrincipalTela, esta assim, pq no netbeans ñ é necessário montar o "montaTela()":

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PrincipalTela().setVisible(true);
                [i]Contador cont = new Contador(lConta);   [/i]                
               cont.start(); 
            }
        });
    }

O NetBeans acusa erro na linha em italico, sendo este o erro:

init:
deps-jar:
Compiling 1 source file to D:\Meus documentos\NetBeansProjects\TimerTeste\build\classes
D:\Meus documentos\NetBeansProjects\TimerTeste\src\timer\PrincipalTela.java:163: non-static variable lConta cannot be referenced from a static context
                Contador cont = new Contador(lConta);   
1 error
CONSTRUÇÃO FALHOU (tempo total: 0 segundos)

Então, pessoal, o q vcs acham q fiz de errado? tem algo a mais, ou a menos no código?

bjosss e Obrigada!!!

Vingdel

Olá Suellen_Susu,

Repare que você retirou a declaração da seguinte variavel na classe PrincipalTela

private static JLabel lConta;

Inclua ela de volta e faça um teste.

Abraço e bons estudos!

R

paulofernandesjr as principais melhorias que faria são de performance :

// 1) Nos metodos que vc invoca nos teus callbacks não passaria o ActionEvent ao metodo e retiraria o parametro recebido do metodo.
// 2) Não utilizar o metodo preencheComZero, pois esta em um loop e o que o metodo preencheComZero faz da para ser feito com uma linha com o operador ternario e
// 3) Nomei as tuas variaveis com o sufixo indicando o teu tipo para os tipos não usuais, neste codigo não teve problema pois a qtd de linhas é pequena agora em um codigo maior…

Aqui um metodo que vc invoca de um callback

private void iniciarActionPerformed(ActionEvent evt) {

}
Suellen_Susu

Vingdel:
Olá Suellen_Susu,

Repare que você retirou a declaração da seguinte variavel na classe PrincipalTela

private static JLabel lConta;

Inclua ela de volta e faça um teste.

Abraço e bons estudos!

Então Vingdel, fiz o q vc disse, mas ai ele indicava erro no private do netbeans private javax.swing.JLabel lConta;

entao eu vltei o nome do lebal cmo jLabel1, e deu certo, mas nas ações dos botoes, onde estava lConta.método , tive q mudar para jLabel1.método…

e o projeto rodou, só q ñ aparece o cronometro, apenas os botoes, e qndo cliko no botao “iniciar”, ele indica isso:

init: deps-jar: Compiling 1 source file to D:\Meus documentos\NetBeansProjects\TimerTeste\build\classes compile-single: run-single: Exception in thread "Thread-3" java.lang.NullPointerException at timer.Contador.run(Contador.java:49) CONSTRUÍDO COM SUCESSO (tempo total: 7 segundos)

e ai, o q vc acha q pode ser?

bjoss e obrigada…

Vingdel

Olá Suellen_Susu,

Faça o seguinte, desfaça a alteração que você fez, retirando o 1, deixando JLabel, além disso, retire o private da referência. Ela ficará assim:

javax.swing.JLabel lContaClaro, certifique-se de tirar todos os 1’s que vc adicionou. A modificação que vocês fez deu certo eliminou o primeiro erro pois vc deixou de usar a referencia com private.

Faça isso e diga-nos o resultado.

Abraço!

Suellen_Susu

Então, ñ deu certo o q vc disse:

pq, primeiro, o private desta linha: private javax.swing.JLabel jLabel; eu ñ posso tirar, pois é codigo interno do netbeans, posso tirar apenas dessa: private static JLabel lConta;

eu tirei desta segunda linha o private e mudei o nome do meu label para jLabel (sem o 1)…

mas continua o programa a rodar do msmo jeito q expliquei anteriormente, e com o msmo erro…
e agora? :frowning:

bRadoCk


bRadoCk wrote:
Igual meu chefe fala, aquele famoso japones: Tivira


Suellen_Susu wrote:
Bom saber q o fórum de java existe para falar ao nosso próximo “se vira”, ao invés de cobrir seu real objetivo, q é o de ajudar e ser ajudado…

Calma moça só fiz um comentario, entendi sua parte, mas tb entendi a par do guialeixo.

Não quis faltar com a educação, estou no forum para ajudar e ser ajudado, como todo mundo nesse forum. se fui sem educação ou indelicado peço desculpas !!!

Anime

Suellen_Susu:
Então, ñ deu certo o q vc disse:

pq, primeiro, o private desta linha: private javax.swing.JLabel jLabel; eu ñ posso tirar, pois é codigo interno do netbeans, posso tirar apenas dessa: private static JLabel lConta;

eu tirei desta segunda linha o private e mudei o nome do meu label para jLabel (sem o 1)…

mas continua o programa a rodar do msmo jeito q expliquei anteriormente, e com o msmo erro…
e agora? :frowning:

Como assim código interno do netbeans,se for aquele código que ele gera da para alterar sim…

Vingdel

Olá Suellen_Susu,

Faz o seguinte, posta aqui seu código completo que a gente tenta dar um jeito nele. Vai ser muito mais rápido que tentar resolver sem ver o código.

No aguardo, até mais!

Suellen_Susu

Anime:
Suellen_Susu:
Então, ñ deu certo o q vc disse:

pq, primeiro, o private desta linha: private javax.swing.JLabel jLabel; eu ñ posso tirar, pois é codigo interno do netbeans, posso tirar apenas dessa: private static JLabel lConta;

eu tirei desta segunda linha o private e mudei o nome do meu label para jLabel (sem o 1)…

mas continua o programa a rodar do msmo jeito q expliquei anteriormente, e com o msmo erro…
e agora? :frowning:

Como assim código interno do netbeans,se for aquele código que ele gera da para alterar sim…

e como q faço para alterá-lo? pq tentei dar um “backspace” no private, e ñ deu certo… :frowning:

bjoss e obrigada…

Suellen_Susu
Vingdel:
Olá Suellen_Susu,

Faz o seguinte, posta aqui seu código completo que a gente tenta dar um jeito nele. Vai ser muito mais rápido que tentar resolver sem ver o código.

No aguardo, até mais!

PrincipalTela:

package timer;   
import javax.swing.JLabel;
import javax.swing.JOptionPane;
  
public class PrincipalTela extends javax.swing.JFrame { 
    private static final long serialVersionUID = 1L;      
    private static boolean contador = false;   
    private static boolean zerado = false;   
    static JLabel lConta;
    
    public PrincipalTela() {
        initComponents();
    }
     public static boolean isContador(){   
        return contador;   
    }   
  
    public static boolean isZerado(){   
        return zerado;   
    }   
       
    public static void setZerado(boolean zero){   
        zerado = zero;   
    }   
                            
    private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {                                        
        contador = true;   
        iniciar.setEnabled(false);   
        pausar.setEnabled(true);   
        zerar.setEnabled(false);   
    }                                       

    private void pausarActionPerformed(java.awt.event.ActionEvent evt) {                                       
        contador = false;   
        iniciar.setEnabled(true);   
        pausar.setEnabled(false);   
        zerar.setEnabled(true); 
    }                                      

    private void zerarActionPerformed(java.awt.event.ActionEvent evt) {                                      
        contador = false;   
        jLabel.setText("00:00:00");   
        zerado = true;   
        jLabel.revalidate();   
        iniciar.setEnabled(true);   
        pausar.setEnabled(false);   
    }                                     

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        this.dispose();
        JOptionPane.showMessageDialog(null, "próxima janela!");
        new PrincipalTela().setVisible(true);
    }                                        
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new PrincipalTela().setVisible(true);
                Contador cont = new Contador(lConta);   
                cont.start(); 
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton iniciar;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel;
    private javax.swing.JButton pausar;
    private javax.swing.JButton zerar;
    // End of variables declaration                   
    
}

Contador:

package timer;
import javax.swing.JLabel;   

public class Contador extends Thread{

    private JLabel hr;   
  
    public Contador(JLabel hora) {   
        this.hr = hora;   
    }

    @Override   
    public void run() {   
       try {   
           int segundo = 0;   
           int hora = 0;   
           int minuto = 0;   
           while( true ) {   
               if( PrincipalTela.isContador() ) {   
                   if( PrincipalTela.isZerado() ) {   
                       segundo = 0;   
                       hora = 0;   
                       minuto = 0;   
                       PrincipalTela.setZerado(false);   
                   }   
                     
                   if( segundo == 59 ){   
                       segundo = 00;   
                       minuto = minuto+1;   
                   }   
       
                   if( minuto == 59 ){   
                       minuto = 00;   
                       hora = hora+1;   
                   }   
                   segundo++;   
                   String timer = completaComZero(hora) + ":" +   
                                  completaComZero(minuto) + ":" +   
                                  completaComZero(segundo);   
                   this.hr.setText(timer);   
                   this.hr.revalidate();   
               }   
               Thread.sleep(1000);   
           }   
       } catch (InterruptedException ex) {   
           ex.printStackTrace();   
       }   
    }   
  
    private String completaComZero(Integer i) {   
        String retorno = null;   
        if( i < 10 ) {   
            retorno = "0"+i;   
        } else {   
            retorno = i.toString();   
        }   
        return retorno;   
    }      
    
}
Suellen_Susu

bRadoCk:

bRadoCk wrote:
Igual meu chefe fala, aquele famoso japones: Tivira

Calma moça só fiz um comentario, entendi sua parte, mas tb entendi a par do guialeixo.

Não quis faltar com a educação, estou no forum para ajudar e ser ajudado, como todo mundo nesse forum. se fui sem educação ou indelicado peço desculpas !!!

Ok, desculpas aceitas (qm sou eu pra ñ desculpar, magiina…)!! tmb peço desculpas, pois acho q devo ter passado a impressão (ao formular minha pergunta), de qrero código pronto, mas realmente ñ era isso…

Anime

Vai em propriedades,la vc vai ver code,dentro do code vc pode fazer as alterações.

Vingdel

Suellen, olhando seu código, tem um monte de erros, um monte de coisa faltando.

Pra começar, você não declarou um monte de coisa que vc tenta inicializar no seu código.

Por exemplo, no construtor da classe PrincipalTela, vc tenta chamar o método initComponents(), mas onde está esse método?

public PrincipalTela() { initComponents(); }
Você precisa repensar seu código inteiro, tem que lembrar que o código do Paulo não foi feito para trabalhar com o seu, vocês precisa torná-lo independente para poder usar junto com o seu.

Outra coisa, você retirou o método montaTela() e disse que não precisava dele, claro que você precisa dele, repare dentro dele que tem muita coisa do JLabel lConta que você ta alegando ter problemas. Se eu fosse você pegaria o código do Paulo e primeiro entenderia cada linha do código e depois tentaria adaptá-lo ao seu projeto.

Um abraço e boa sorte!

gpd38

Paulo, testei seu codigo aqui e ele é muito interessante, fiz um teste basicao aqui e encontrei um erro. quando ele passa para 2 minutos vc ja anda 1 hora. Da uma olhada na sua classe contador e verifica os IF`s.

Flw.

Se eu achar outro erro te falo.

paulofernandesjr

gpd38:
Paulo, testei seu codigo aqui e ele é muito interessante, fiz um teste basicao aqui e encontrei um erro. quando ele passa para 2 minutos vc ja anda 1 hora. Da uma olhada na sua classe contador e verifica os IF`s.

Flw.

Se eu achar outro erro te falo.

eu vi, fiz isso para testar as horas e não prestei atenção :stuck_out_tongue:

valeu

bzy

Bom... sei que a discusão já foi encerrada mas quero deixar meu recado.
Se for para falar procure no google ou algo do tipo, não diga nada.
Se você acha que a pergunta é boba demais para você responder, não responda nada.
A pergunta sendo simples ou não é sempre um problema para quem posta.

Já vi alguns cronomêtros utilizando JLabel mas eu prefiro desenhar no JPanel,

package br.com.mvbos.cron;

import br.com.mvbos.cron.modelo.Config;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;

/**
 *
 * @author marcusbecker
 */
public class TimerFrm extends javax.swing.JPanel {

    private Calendar calend = Calendar.getInstance();
    private Config config;
    private Image imagem;
    private Font fonte;
    private int tempFonteTamanho;
    private String tempFonteLetra;
    private boolean timerAtivo = true;

    public TimerFrm(Config c) {
        this.config = c;
        initComponents();

        calend.set(Calendar.HOUR, config.getHora());
        calend.set(Calendar.MINUTE, config.getMinuto());
        calend.set(Calendar.SECOND, config.getSegundo());
        fonte = new Font(config.getFonte(), Font.PLAIN, config.getTamanhoLetra());
        if (c.getFundo() != null) {
            imagem = getToolkit().createImage(c.getFundo());
        }
        tempFonteLetra = config.getFonte();
        tempFonteTamanho = config.getTamanhoLetra();
    }

    public void iniTimer() {
        new timer().start();

    }

    public boolean isTimerAtivo() {
        return timerAtivo;
    }

    public void setTimerAtivo(boolean timerAtivo) {
        this.timerAtivo = timerAtivo;
    }

                    
    private void initComponents() {

        setName("Form"); // NOI18N

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 503, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 301, Short.MAX_VALUE)
        );
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int x = 10 + (config.getTamanhoLetra() / 8);
        int y = 20 + config.getTamanhoLetra();
        g.setColor(config.getCor());
        if (imagem != null) {
            g.drawImage(imagem, 0, 0, this);
        }
        g.setFont(fonte);
        g.drawString(calend.get(Calendar.HOUR) + ":" + calend.get(Calendar.MINUTE) + ":" + calend.get(Calendar.SECOND), x, y);
    }

    class timer extends Thread {

        @Override
        public void run() {
            while (true) {
                try {
                    int total = calend.get(Calendar.HOUR) + calend.get(Calendar.MINUTE) + calend.get(Calendar.SECOND);
                    if (!isTimerAtivo() || total == 0) {
                        break;
                    }
                    calend.add(Calendar.SECOND, config.isRegressivo() ? -1 : 1);
                    if (tempFonteTamanho != config.getTamanhoLetra() || !tempFonteLetra.equals(config.getFonte())) {
                        fonte = new Font(config.getFonte(), Font.PLAIN, config.getTamanhoLetra());
                    }

                    repaint();
                    Thread.sleep(1000);

                } catch (InterruptedException ex) {
                    Logger.getLogger(TimerFrm.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

}

assim tenho mais liberdade e recursos.

Vou postar o meu.

Abs.

Criado 3 de setembro de 2009
Ultima resposta 17 de out. de 2010
Respostas 35
Participantes 9