JFrame + Implementação de cronometro

1 resposta
R

Galera, estou tentando fazer um trabalho com os seguintes requisitos:

1 - Cronometro (Relógio)
2 - Rodar em Threads
3 - Poder mudar a velocidade a qualquer momento
4 - imprimir de forma gráfica (JFRAME)

Fiz a seguinte classe:

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Rafael
 */
public class AtributosCronometro extends Thread{
    int hora;
    int minuto;
    int segundo;

    public void Inicio() {
        this.hora = 0;
        this.minuto = 0;
        this.segundo = 0;
    }

    public int getHora() {
        return hora;
    }

    public void setHora(int hora) {
        this.hora = hora;
    }

    public int getMinuto() {
        return minuto;
    }

    public void setMinuto(int minuto) {
        this.minuto = minuto;
    }

    public int getSegundo() {
        return segundo;
    }

    public void setSegundo(int segundo) {
        this.segundo = segundo;
    }
  
}

E criei uma classe tipo JFrame:

import java.text.DecimalFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Rafael
 */
public class FrameCronometro extends javax.swing.JFrame implements Runnable {
    
    public String s;
    public String m;
    public String h;
    
       AtributosCronometro cronometro = new AtributosCronometro();
       
        DecimalFormat decimalFormat = new DecimalFormat("00");
    /**
     * Creates new form NewJFrame
     */
    public FrameCronometro(){
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        lblHora = new javax.swing.JLabel();
        lblSegundo = new javax.swing.JLabel();
        lblMinuto = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        btnRodar = new javax.swing.JButton();
        sliderVelocidade = new javax.swing.JSlider();
        mostraControleDeslizante = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        lblHora.setText("00");

        lblSegundo.setText("00");

        lblMinuto.setText("00");

        jLabel4.setText(":");

        jLabel5.setText(":");

        btnRodar.setText("Rodar");
        btnRodar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRodarActionPerformed(evt);
            }
        });

        sliderVelocidade.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                sliderVelocidadeStateChanged(evt);
            }
        });

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, sliderVelocidade, org.jdesktop.beansbinding.ELProperty.create("${value}"), mostraControleDeslizante, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);

        jLabel1.setText("+ Lento");

        jLabel2.setText("+ Rápido");

        jLabel3.setText("Normal = 10");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(sliderVelocidade, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel2)
                                        .addGap(171, 171, 171)
                                        .addComponent(mostraControleDeslizante))
                                    .addGroup(layout.createSequentialGroup()
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                            .addComponent(btnRodar)
                                            .addGroup(layout.createSequentialGroup()
                                                .addComponent(lblHora, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(jLabel4)))
                                        .addGap(17, 17, 17)
                                        .addComponent(lblMinuto, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jLabel5)
                                        .addGap(18, 18, 18)
                                        .addComponent(lblSegundo, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 115, Short.MAX_VALUE)
                                .addComponent(jLabel1)))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(jLabel3)
                        .addGap(37, 37, 37))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(113, 113, 113)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lblMinuto, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel5))
                    .addComponent(lblSegundo, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(lblHora, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel2)
                        .addComponent(jLabel1))
                    .addComponent(mostraControleDeslizante, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(sliderVelocidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(32, 32, 32)
                .addComponent(btnRodar)
                .addGap(4, 4, 4)
                .addComponent(jLabel3)
                .addContainerGap())
        );

        bindingGroup.bind();

        pack();
    }// </editor-fold>

    [b]//Aqui eu fiz um Slider para enviar os valores de alteração do método sleep()[/b]

    private void sliderVelocidadeStateChanged(javax.swing.event.ChangeEvent evt) {
        // TODO add your handling code here:
         System.out.println("rodou!");
        cronometro.Inicio();
      
         while (cronometro.getHora()<25) {
            try {
                cronometro.sleep(sliderVelocidade.getValue());
                //velocidade normal 1000
                //cronometro.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(FrameCronometro.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                cronometro.sleep(0);
            } catch (InterruptedException ex) {
                Logger.getLogger(FrameCronometro.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            cronometro.setSegundo(cronometro.getSegundo()+1);
            if(cronometro.getSegundo()>59){
                cronometro.setMinuto(cronometro.getMinuto()+1);
                cronometro.setSegundo(0);
                if(cronometro.getMinuto()>59){
                    cronometro.setHora(cronometro.getHora()+1);
                     cronometro.setMinuto(0);
                      if(cronometro.getHora()>23){
                          cronometro.setHora(0);
                      }
                }
            }
        
            this.s = decimalFormat.format(cronometro.getSegundo());
            this.m = decimalFormat.format(cronometro.getMinuto());
            this.h = decimalFormat.format(cronometro.getHora());
            
            
            lblSegundo.setText(this.s);
            lblMinuto.setText(this.m);
            lblHora.setText(this.h);
            System.out.println(this.h+":"+this.m+":"+this.s);
            //String saida = this.h+":"+this.m+":"+this.s;
            //JOptionPane.showMessageDialog(null, saida);
         }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]){
        
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FrameCronometro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FrameCronometro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FrameCronometro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FrameCronometro.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable(){
            public void run() {
                new FrameCronometro().setVisible(true);
            }
        });
        
        
        
    }
    
    
    // Variables declaration - do not modify
    private javax.swing.JButton btnRodar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel lblHora;
    private javax.swing.JLabel lblMinuto;
    private javax.swing.JLabel lblSegundo;
    private javax.swing.JLabel mostraControleDeslizante;
    private javax.swing.JSlider sliderVelocidade;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration

    @Override
    public void run() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

[color=red]Minha dúvida é que não estou conseguindo IMPRIMIR os valores do cronometro no LABEL que fiz para tela principal (JFRAME)
OBS: Feito no NetBeans [/color]

1 Resposta

V

Por favor, ao postar tópicos, não marque o título com informações óbvias como [Dúvida] ou [Ajuda].

Quanto à sua dúvida, dê uma olhada nesse exemplo:

E nos dois da página seguinte.

Criado 14 de abril de 2013
Ultima resposta 14 de abr. de 2013
Respostas 1
Participantes 2