Foros del Web » Programación para mayores de 30 ;) » Java »

¿Cómo hacer un temporizador en JAVA?

Estas en el tema de ¿Cómo hacer un temporizador en JAVA? en el foro de Java en Foros del Web. ¡Hola! Tengo una duda, quiero hacer un temporizador en java, con interfaz gráfica, y que ingreses el tiempo que deseas que transcurra hasta que llegue ...
  #1 (permalink)  
Antiguo 28/07/2015, 22:54
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 10 años
Puntos: 1
Busqueda ¿Cómo hacer un temporizador en JAVA?

¡Hola!

Tengo una duda, quiero hacer un temporizador en java, con interfaz gráfica, y que ingreses el tiempo que deseas que transcurra hasta que llegue a cero, por ejemplo, poner una hora, y que el temporizador empiece a descender a 59:59, 59:58, y así, ¿alguien sabe cómo?

(Que se usen los JForm, GUI)

Gracias, si alguien ayuda :DD
  #2 (permalink)  
Antiguo 29/07/2015, 08:13
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Coloca tu avance para ayudarte.
  #3 (permalink)  
Antiguo 29/07/2015, 11:55
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 10 años
Puntos: 1
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Gus, no tengo ni idea, por eso busco una pequeña orientación, gracias :)
  #4 (permalink)  
Antiguo 29/07/2015, 13:48
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Me pareció interesante, así que vamos a ello:

Este es el Timer:

Código Java:
Ver original
  1. import java.util.Timer;
  2. import java.util.TimerTask;
  3.  
  4. public class Timeout {
  5.  
  6.     private int hour = 0;
  7.     private int minute = 0;
  8.     private int second = 11;
  9.     private Timer timer;
  10.     private boolean isTimerRunning;
  11.     private Display display;
  12.  
  13.     public Timeout() {
  14.         timer = new Timer();
  15.         display = new Display();
  16.     }
  17.  
  18.     TimerTask task = new TimerTask() {
  19.         @Override
  20.         public void run() {
  21.             isTimerRunning = true;
  22.             if(second > 0) {
  23.                 second--;
  24.             } else {
  25.                 second = 59;
  26.                 if(minute > 0) minute--;
  27.                 else {
  28.                     minute = 59;
  29.                     if(hour > 0) hour--;
  30.                     // si segundo = 0, minuto = 0 y hora = 0,
  31.                     // cancelamos el timer
  32.                     else {
  33.                         isTimerRunning = false;
  34.                         timer.cancel();
  35.                         timer.purge();
  36.                     }
  37.                 }
  38.             }
  39.             if(isTimerRunning)
  40.                 display.printTime(hour, minute, second);
  41.         }
  42.     }; // fin timertask
  43.  
  44.     public void start(int timeout, int interval) {
  45.         timer.schedule(task, timeout, interval);
  46.     }
  47.  
  48. } // fin clase

Esta clase imprime la hora actual:

Código Java:
Ver original
  1. public class Display {
  2.  
  3.     public void printTime(int hour, int minute, int second) {
  4.         String fullHour = "";
  5.  
  6.         fullHour += (hour > 9) ? ":" + hour : "0" + hour;
  7.         fullHour += (minute > 9) ? ":" + minute : ":0" + minute;
  8.         fullHour += (second > 9) ? ":" + second : ":0" + second;
  9.  
  10.         System.out.println(fullHour);
  11.     }
  12. }

Y en el main solamente iniciamos el timer, pasándole el timeout (tiempo de espera en el que al acabar empezará el timer) y el intérvalo de tiempo en que se ejecutará el timer (en milisegundos).

Código Java:
Ver original
  1. public class TimerTest {
  2.  
  3.     public static void main(String[] args) {
  4.         Timeout timeout = new Timeout();
  5.         timeout.start(0, 1000);
  6.     }
  7. }

Demo:


Última edición por GusGarsaky; 29/07/2015 a las 14:02
  #5 (permalink)  
Antiguo 29/07/2015, 14:10
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 10 años
Puntos: 1
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Me sirvió mucho Gus, me funciona, tengo unas dudas:

¿En el main en la parte ".start(0,1000);" es el retraso el 1000?

Y si quiero hacerlo con un JFrame, ¿puedo implementar el mismo código?

Gracias :D
  #6 (permalink)  
Antiguo 29/07/2015, 14:29
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: ¿Cómo hacer un temporizador en JAVA?

La lógica es la misma, intenta adaptarlo a un JFrame y, si tienes dudas, me comentas. Respecto a tu pregunta, el primer parámetro es el timeout, es decir, el delay, el tiempo de espera para que empiece el timer. El segundo parámetro es el intervalo de tiempo en el que se ejecutará el timer.
  #7 (permalink)  
Antiguo 29/07/2015, 14:58
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 10 años
Puntos: 1
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Intenté hacerlo, en la clase "Timeout", con el primer código que me diste, cambié las siguientes líneas:

Código Java:
Ver original
  1. Inicio display;
  2.  
  3.     public Timeout() {
  4.         timer = new Timer();
  5.         display = new Inicio();
  6.     }
Son las primeras, aunque no sé si lo hice bien...

En el JFrame "Inicio", puse un JLabel(TiempoPC1) y un JButton(Start)...

Para que se ponga el texto en la JLabel:
Código Java:
Ver original
  1. public void printTime(int hour, int minute, int second) {
  2.         String fullHour = "";
  3.  
  4.         fullHour += (hour > 9) ? ":" + hour : "0" + hour;
  5.         fullHour += (minute > 9) ? ":" + minute : ":0" + minute;
  6.         fullHour += (second > 9) ? ":" + second : ":0" + second;
  7.         this.TiempoPC1.setText(fullHour);
  8.         this.TiempoPC1.updateUI();
  9.     }

Para el JButton:
Código Java:
Ver original
  1. private void startActionPerformed(java.awt.event.ActionEvent evt) {
  2.         Timeout timeout = new Timeout();
  3.         timeout.start(0, 1000);
  4.     }

Intenté así y en el main que ejecute el JFrame Inicio en vez del Timeout, y no me funciona, sé que hice algo mal, pero hey, lo intenté xDD

(Estoy algo verde en Java, uso más HTML/PHP xD)


EDITADO:
Le agregué un método con la librería JOptionPane para que la variable "hour" en la clase "Timeout" sea ingresada al momento de ponerle "start", así no solo es una hora, sino, las que desees, en la consola sí me funciona, pero sigue sin funcionar en el JFrame.

Última edición por OPMUANRK; 29/07/2015 a las 15:27
  #8 (permalink)  
Antiguo 29/07/2015, 16:46
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Solo pasa la referencia del JFrame al constructor de Timeout:

Código Java:
Ver original
  1. import java.util.Timer;
  2. import java.util.TimerTask;
  3.  
  4. public class Timeout {
  5.  
  6.     private int hour;
  7.     private int minute;
  8.     private int second;
  9.     private Timer timer;
  10.     private boolean isTimerRunning;
  11.     private MainGUI mainGui;
  12.     private TimeFormatter tf;
  13.  
  14.     public Timeout(MainGUI mainGui) {
  15.         timer = new Timer();
  16.         tf = new TimeFormatter();
  17.         mainGui = mainGui;
  18.     }
  19.  
  20.     TimerTask task = new TimerTask() {
  21.         @Override
  22.         public void run() {
  23.             isTimerRunning = true;
  24.             if(second > 0) {
  25.                 second--;
  26.             } else {
  27.                 second = 59;
  28.                 if(minute > 0) minute--;
  29.                 else {
  30.                     minute = 59;
  31.                     if(hour > 0) hour--;
  32.                     // si segundo = 0, minuto = 0 y hora = 0,
  33.                     // cancelamos el timer
  34.                     else {
  35.                         isTimerRunning = false;
  36.                         timer.cancel();
  37.                         timer.purge();
  38.                     }
  39.                 }
  40.             }
  41.             if(isTimerRunning) {
  42.                 String time = tf.formatTime(hour, minute, second);
  43.                 mainGui.getTxtTime().setText(time);
  44.             }
  45.         }
  46.     }; // fin timertask
  47.  
  48.     public void start(int timeout, int interval) {
  49.         timer.schedule(task, timeout, interval);
  50.     }
  51.  
  52.     // getters y setters para las propiedades
  53.  
  54. } // fin clase

Redefine Display para que retorne la hora formateada:

Código Java:
Ver original
  1. public class TimeFormat {
  2.  
  3.     public String formatTime(int hour, int minute, int second) {
  4.         String fullHour = "";
  5.  
  6.         fullHour += (hour > 9) ? ":" + hour : "0" + hour;
  7.         fullHour += (minute > 9) ? ":" + minute : ":0" + minute;
  8.         fullHour += (second > 9) ? ":" + second : ":0" + second;
  9.  
  10.         return fullHour;
  11.     }
  12. }

Entonces, asocias el JFrame con el Timer así:

Código Java:
Ver original
  1. public class MainGUI extends JFrame {
  2.  
  3.     private Timeout timeout;
  4.  
  5.     public MainGUI() {
  6.         new Timeout(this);
  7.         initComponents();
  8.     }
  9.  
  10.     private void initComponents() {
  11.         // aqui construyes tu GUI
  12.     }
  13.  
  14.     public void startTimer(int delay, int interval) {
  15.         timeout.start(delay, interval);
  16.    }
  17. }

Y la clase Main:

Código Java:
Ver original
  1. public class Main {
  2.  
  3.     public static void main(String[] args) {
  4.         MainGUI gui = new MainGUI();
  5.         gui.setVisible(true);
  6.         gui.startTime(0, 1000);
  7.     }
  8. }
  #9 (permalink)  
Antiguo 29/07/2015, 17:10
Avatar de OPMUANRK  
Fecha de Ingreso: diciembre-2014
Mensajes: 52
Antigüedad: 10 años
Puntos: 1
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Gracias de nuevo, Gus, pero "mainGui.getTxtTime().setText(time);" me salta error con eso...

P.D:

Uso NetBeans

Última edición por OPMUANRK; 29/07/2015 a las 18:00
  #10 (permalink)  
Antiguo 29/07/2015, 18:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: ¿Cómo hacer un temporizador en JAVA?

Hombre, MainGUI hereda de JFrame, pero si tú no implementas el método getTxtTime() difícilmente va a funcionar.

El mensaje de error ¿qué te dice? Es importante que TÚ lo leas.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: interfaz, netbeans, temporizador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:00.