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.
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.
Y para mostrar un contador (un label por ejemplo) con el tiempo que falta para que llegue a cero el timer, como sería ¿?
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í:
for(int time = 60;0<time;time--) {
label.setText(time + "s Restantes");
Thread.sleep(1000);
}
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!.
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.