Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Baal_30 en 25 Febrero 2016, 22:59 pm



Título: Contador de tiempo
Publicado por: Baal_30 en 25 Febrero 2016, 22:59 pm
Muy buenas, estoy intentando hacer que cuando le de a un botón se ponga un contador que cuente hasta "X" segundos, y mientras este tiempo que deje inactivo el mismo botón.

He estado buscando y solo encuentro cosas con timer pero no explican exactamente lo que quiero.

No se si me he explicado, un ejemplo sería un botón de "construir" y hasta que no ha terminado de construir no me vuelva a dejar pulsar el botón.

Gracias de antemano.


Título: Re: Contador de tiempo
Publicado por: El Benjo en 26 Febrero 2016, 06:13 am
En el evento click del botón deshabilita el mismo botón.
En el evento 'tick' del timer compara si se ha cumplido con el tiempo establecido, de ser así dejas de contar el tiempo y vuelves a habilitar el botón.


Título: Re: Contador de tiempo
Publicado por: Baal_30 en 28 Febrero 2016, 00:04 am
Y para mostrar un contador (un label por ejemplo) con el tiempo que falta para que llegue a cero el timer, como sería ¿?


Título: Re: Contador de tiempo
Publicado por: 3n31ch en 28 Febrero 2016, 00:16 am
Puedes por ejemplo hacer un thread, y dentro del mismo un ciclo for, que realice por ejemplo 60 iteraciones, y en cada iteración hacemos un Thread.sleep(1000) por lo que se demoraría 1 minuto en terminar de ejecutarse, y a su vez, dentro del mismo ciclo for cambias el texto del label poniendo el tiempo... algo así:

Código
  1. for(int time = 60;0<time;time--) {
  2.    label.setText(time + "s Restantes");
  3.    Thread.sleep(1000);
  4. }
  5.  


Algo por el estilo, lo que no recuerdo es si después de un setText es necesario un repaint, hace mucho que no programo en Java, xD!.


Título: Re: Contador de tiempo
Publicado por: El Benjo en 29 Febrero 2016, 06:25 am
Lo que comenta "Nacho" sobre el repaint creo que no sería necesario. Yo tampoco programo en JAVA, pero las reglas de la programación orientada a objetos y/o eventos en general suelen ser las mismas, y en este caso lo que ocurre con el repaint sería de hecho que el objeto label, al detectar que han cambiado el texto que contiene, se dibuja él mismo (los mismos objetos manejan la forma en que se dibuja su contenido y cuando). Ahora, el repaint no es necesario, sino que (creo que) el control dispara el evento que indica que se ha vuelto a dibujar.