SlideShare a Scribd company logo
En esta práctica vamos a implementar un cronómetro con horas, minutos y segundos. Los dígitos son imágenes.

El cronómetro tiene dos botones:

    o   Un botón para arrancar y pausar.

    o   Un botón para reiniciar todo a cero.




FrameListener.java

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameListener extends WindowAdapter {

        public void windowClosing(WindowEvent e){
               System.exit(0);
        }
}




                                                                            bitCoach::Juan Bautista Cascallar Lorenzo
CronometroThread.java

import   java.awt.event.ActionEvent;
import   java.awt.event.ActionListener;
import   javax.swing.ImageIcon;
import   javax.swing.JButton;
import   javax.swing.JPanel;
import   javax.swing.JLabel;

public class CronometroThread extends JPanel implements Runnable, ActionListener {

         private static final long serialVersionUID = 3287496534931916605L;

         //Atributos
         Thread crono_hilo = null;

         private boolean sw = true;
         private boolean detenido = true;

         private int horas = 0;
         private int minutos = 0;
         private int segundos = 0;

         JLabel[] lbl_digitos = null;

         JLabel etiqueta = null;

         char[] crono = {'0','0',':','0','0',':','0','0'};

         //Constructor
         public CronometroThread(){

                lbl_digitos = new JLabel [8];

                this.setLayout(null);
                this.setBounds(10, 10, 300, 140);

                for(int i = 0; i < lbl_digitos.length; i++) {
                       lbl_digitos[i] = new JLabel();
                       this.add(lbl_digitos[i]);
                }

                mostrarInfoCrono();

                JButton btn_arrancar_parar = new JButton("Arrancar/Parar");
                btn_arrancar_parar.setName("btn_arrancar_parar");
                btn_arrancar_parar.addActionListener(this);
                btn_arrancar_parar.setBounds(20,50,120,20);
                this.add(btn_arrancar_parar);

                JButton btn_reiniciar = new JButton("Reiniciar");
                btn_reiniciar.setName("btn_reiniciar");
                btn_reiniciar.addActionListener(this);
                btn_reiniciar.setBounds(150,50,110,20);
                this.add(btn_reiniciar);

                crono_hilo = new Thread(this);
                crono_hilo.start();

         }




                                                                              bitCoach::Juan Bautista Cascallar Lorenzo
private void mostrarInfoCrono(){

       for(int i = 0; i < lbl_digitos.length; i++) {
              if(crono[i] != ':'){
                      lbl_digitos[i].setIcon(new ImageIcon("imagenes/" + crono[i] + ".gif"));
                      lbl_digitos[i].setBounds(70 + (i*13), 10, 13, 23);
              }else{
                      lbl_digitos[i].setIcon(new ImageIcon("imagenes/separador.gif"));
                      lbl_digitos[i].setBounds(70 + (i*13), 10, 13, 23);
              }
       }
}

@Override
public void run() {
       // TODO Auto-generated method stub

       StringBuffer tmp;

       while(sw == true){
              try {
                      if(detenido == false){
                             mostrarInfoCrono();
                             Thread.sleep(1000);
                             segundos++;
                             //Calculamos los valores
                             if(segundos == 60){
                                     segundos = 0; minutos++;
                                     if(minutos == 60){
                                             minutos = 0; horas++;
                                             if(horas == 24){ horas = 0; }
                                     }
                             }

                             //Formatear la hora
                             tmp = new StringBuffer(8);

                             if(horas < 10){tmp.append('0');}
                             tmp.append(horas); tmp.append(':');
                             if(minutos < 10){tmp.append('0');}
                             tmp.append(minutos); tmp.append(':');
                             if(segundos < 10){tmp.append('0');}

                             tmp.append(segundos);
                             //System.out.println(tmp.toString());
                             crono = tmp.toString().toCharArray();

                     }
              } catch (InterruptedException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              }
       }
}




                                                                     bitCoach::Juan Bautista Cascallar Lorenzo
//--- EVENTOS ---
       @Override
       public void actionPerformed(ActionEvent arg0) {
              // TODO Auto-generated method stub
              Object control = arg0.getSource();

              if(control instanceof JButton){
                     if(((JButton) control).getName().equals("btn_arrancar_parar")){
                             if(detenido == true){
                                    detenido = false;
                             }else{
                                    detenido = true;
                             }
                     }

                      if(((JButton) control).getName().equals("btn_reiniciar")){
                             detenido = true;

                                horas = 0;
                                minutos = 0;
                                segundos = 0;

                                for(int i = 0; i < crono.length; i++){
                                       if((i==2) || (i==5)){
                                               crono[i] = ':';
                                       }else{
                                               crono[i] = '0';
                                       }
                                }

                                mostrarInfoCrono();
                      }
              }

       }

}



TestCronometro.java

import javax.swing.JFrame;

public class TestCronometro {

       private static CronometroThread cr = null;

       public static void main(String[] args) {
              // TODO Auto-generated method stub

              JFrame frame = new JFrame("Prueba del componente cronómetro");
              frame.setLayout(null);
              frame.addWindowListener(new FrameListener());
              frame.setBounds(0,0,300,140);
              cr = new CronometroThread();
              frame.add(cr);
              frame.setVisible(true);

       }

}




                                                                          bitCoach::Juan Bautista Cascallar Lorenzo

More Related Content

PDF
Java Thread Cronometro
PDF
Java AWT Calculadora
PPTX
Алексей Кутумов, C++ без исключений, часть 3
PPTX
JavaScript Assíncrono
DOCX
EJEMPLOS DESARROLLADOS
ODP
Антон Полухин. C++17
DOCX
Code pic
PDF
Тененёв Анатолий, Boost.Asio в алгоритмической торговле
Java Thread Cronometro
Java AWT Calculadora
Алексей Кутумов, C++ без исключений, часть 3
JavaScript Assíncrono
EJEMPLOS DESARROLLADOS
Антон Полухин. C++17
Code pic
Тененёв Анатолий, Boost.Asio в алгоритмической торговле

What's hot (17)

PPTX
javascript networking
PDF
I will be callback/JS同步與非同步
DOCX
Taller de string(java)
PDF
Rambler.iOS #8: Чистые unit-тесты
ODP
C++14 reflections
PPTX
Java осень 2012 лекция 6
PDF
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
DOCX
Hace una calculadora en jeank
KEY
Javascrpt arale
DOCX
Algoritmo secuencial
PDF
Kruskal algorithm
PPTX
Java весна 2013 лекция 6
PDF
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
PDF
Diff & Integral formula the newtun
DOCX
Danna y felix 10°
DOCX
PDF
Фатальный недостаток Node.js
javascript networking
I will be callback/JS同步與非同步
Taller de string(java)
Rambler.iOS #8: Чистые unit-тесты
C++14 reflections
Java осень 2012 лекция 6
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
Hace una calculadora en jeank
Javascrpt arale
Algoritmo secuencial
Kruskal algorithm
Java весна 2013 лекция 6
openFrameworks基礎 動きを生みだす、アニメーション入門 - 芸大グラフィックスプログラミング演習B
Diff & Integral formula the newtun
Danna y felix 10°
Фатальный недостаток Node.js
Ad

Viewers also liked (20)

PDF
Explicación del código del Servlet HolaMundo
PDF
App Android MiniBanco
PDF
Java Applet:::Pelota que rebota en un recinto.
PDF
Proyecto JSP
PDF
Acceso a BBDD mediante un servlet
PDF
Find File Servlet DB
PDF
Java AWT Tres en Raya
PDF
Web de noticias en Ajax
PDF
Servlet Hola Mundo con Eclipse y Tomcat
PDF
Presentazione
PDF
Paper to prototype, or.... How I learned to stop worrying and love Science
PDF
Word VBA
PDF
ActionScript Buscar Parejas
PDF
Acciones JSP
PDF
Elementos de script en JSP
PDF
Word compilar bibliografia
PDF
ActionScript Caza pajarotos
PDF
Textura de agua
PDF
jQuery Mobile :: Cuadros de diálogo
PDF
Interpolación de Movimiento con AS
Explicación del código del Servlet HolaMundo
App Android MiniBanco
Java Applet:::Pelota que rebota en un recinto.
Proyecto JSP
Acceso a BBDD mediante un servlet
Find File Servlet DB
Java AWT Tres en Raya
Web de noticias en Ajax
Servlet Hola Mundo con Eclipse y Tomcat
Presentazione
Paper to prototype, or.... How I learned to stop worrying and love Science
Word VBA
ActionScript Buscar Parejas
Acciones JSP
Elementos de script en JSP
Word compilar bibliografia
ActionScript Caza pajarotos
Textura de agua
jQuery Mobile :: Cuadros de diálogo
Interpolación de Movimiento con AS
Ad

More from jubacalo (16)

PDF
jQuery Mobile :: Enlaces a páginas internas.
PDF
MIT App Inventor2 Pintar en Imagen
PDF
Cronómetro con MIT App Inventor 2
PDF
Configurar entorno Android
PDF
Servlets que manejan datos de formularios HTML
PDF
Jsp directiva page
PDF
Crear Base de Datos en Oracle
PDF
Escenarios
PDF
Matrices02
PDF
Gráficos
PDF
Tabla Dinámica
PDF
Tabla de Datos
PDF
Funciones lógicas y condicionales
PDF
Solver
PDF
Java::Acceso a Bases de Datos
PDF
Sincronizar Threads
jQuery Mobile :: Enlaces a páginas internas.
MIT App Inventor2 Pintar en Imagen
Cronómetro con MIT App Inventor 2
Configurar entorno Android
Servlets que manejan datos de formularios HTML
Jsp directiva page
Crear Base de Datos en Oracle
Escenarios
Matrices02
Gráficos
Tabla Dinámica
Tabla de Datos
Funciones lógicas y condicionales
Solver
Java::Acceso a Bases de Datos
Sincronizar Threads

Java Thread Cronometro

  • 1. En esta práctica vamos a implementar un cronómetro con horas, minutos y segundos. Los dígitos son imágenes. El cronómetro tiene dos botones: o Un botón para arrancar y pausar. o Un botón para reiniciar todo a cero. FrameListener.java import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class FrameListener extends WindowAdapter { public void windowClosing(WindowEvent e){ System.exit(0); } } bitCoach::Juan Bautista Cascallar Lorenzo
  • 2. CronometroThread.java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JLabel; public class CronometroThread extends JPanel implements Runnable, ActionListener { private static final long serialVersionUID = 3287496534931916605L; //Atributos Thread crono_hilo = null; private boolean sw = true; private boolean detenido = true; private int horas = 0; private int minutos = 0; private int segundos = 0; JLabel[] lbl_digitos = null; JLabel etiqueta = null; char[] crono = {'0','0',':','0','0',':','0','0'}; //Constructor public CronometroThread(){ lbl_digitos = new JLabel [8]; this.setLayout(null); this.setBounds(10, 10, 300, 140); for(int i = 0; i < lbl_digitos.length; i++) { lbl_digitos[i] = new JLabel(); this.add(lbl_digitos[i]); } mostrarInfoCrono(); JButton btn_arrancar_parar = new JButton("Arrancar/Parar"); btn_arrancar_parar.setName("btn_arrancar_parar"); btn_arrancar_parar.addActionListener(this); btn_arrancar_parar.setBounds(20,50,120,20); this.add(btn_arrancar_parar); JButton btn_reiniciar = new JButton("Reiniciar"); btn_reiniciar.setName("btn_reiniciar"); btn_reiniciar.addActionListener(this); btn_reiniciar.setBounds(150,50,110,20); this.add(btn_reiniciar); crono_hilo = new Thread(this); crono_hilo.start(); } bitCoach::Juan Bautista Cascallar Lorenzo
  • 3. private void mostrarInfoCrono(){ for(int i = 0; i < lbl_digitos.length; i++) { if(crono[i] != ':'){ lbl_digitos[i].setIcon(new ImageIcon("imagenes/" + crono[i] + ".gif")); lbl_digitos[i].setBounds(70 + (i*13), 10, 13, 23); }else{ lbl_digitos[i].setIcon(new ImageIcon("imagenes/separador.gif")); lbl_digitos[i].setBounds(70 + (i*13), 10, 13, 23); } } } @Override public void run() { // TODO Auto-generated method stub StringBuffer tmp; while(sw == true){ try { if(detenido == false){ mostrarInfoCrono(); Thread.sleep(1000); segundos++; //Calculamos los valores if(segundos == 60){ segundos = 0; minutos++; if(minutos == 60){ minutos = 0; horas++; if(horas == 24){ horas = 0; } } } //Formatear la hora tmp = new StringBuffer(8); if(horas < 10){tmp.append('0');} tmp.append(horas); tmp.append(':'); if(minutos < 10){tmp.append('0');} tmp.append(minutos); tmp.append(':'); if(segundos < 10){tmp.append('0');} tmp.append(segundos); //System.out.println(tmp.toString()); crono = tmp.toString().toCharArray(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } bitCoach::Juan Bautista Cascallar Lorenzo
  • 4. //--- EVENTOS --- @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub Object control = arg0.getSource(); if(control instanceof JButton){ if(((JButton) control).getName().equals("btn_arrancar_parar")){ if(detenido == true){ detenido = false; }else{ detenido = true; } } if(((JButton) control).getName().equals("btn_reiniciar")){ detenido = true; horas = 0; minutos = 0; segundos = 0; for(int i = 0; i < crono.length; i++){ if((i==2) || (i==5)){ crono[i] = ':'; }else{ crono[i] = '0'; } } mostrarInfoCrono(); } } } } TestCronometro.java import javax.swing.JFrame; public class TestCronometro { private static CronometroThread cr = null; public static void main(String[] args) { // TODO Auto-generated method stub JFrame frame = new JFrame("Prueba del componente cronómetro"); frame.setLayout(null); frame.addWindowListener(new FrameListener()); frame.setBounds(0,0,300,140); cr = new CronometroThread(); frame.add(cr); frame.setVisible(true); } } bitCoach::Juan Bautista Cascallar Lorenzo