Está en la página 1de 2

Documentación

Los tutoriales de Java ™

Trail: Creating a GUI With JFC/Swing


Lesson: Using Other Swing Features

Los Tutoriales de Java se han escrito para JDK 8. Los ejemplos y prácticas descritos en esta página no aprovechan las mejoras introducidas en
versiones posteriores y podrían usar tecnología que ya no está disponible.
Consulte las Notas de la versión de JDK para obtener información sobre nuevas funciones, mejoras y opciones eliminadas o en desuso para todas las
versiones de JDK.

Cómo usar temporizadores de oscilación


Un temporizador Swing (una instancia de javax.swing.Timer) dispara uno o más eventos de acción después de un retraso especificado. No
confunda los temporizadores Swing con la función de temporizador de uso general en el java.utilpaquete. Esta página describe solo los
temporizadores Swing.

En general, recomendamos usar temporizadores Swing en lugar de temporizadores de propósito general para tareas relacionadas con la GUI porque
todos los temporizadores Swing comparten el mismo subproceso de temporizador preexistente y la tarea relacionada con la GUI se ejecuta
automáticamente en el subproceso de envío de eventos. Sin embargo, puede usar un temporizador de uso general si no planea tocar la GUI del
temporizador o si necesita realizar un procesamiento prolongado.

Puede usar los temporizadores Swing de dos maneras:

Para realizar una tarea una vez, después de un retraso.


Por ejemplo, el administrador de información sobre herramientas utiliza temporizadores Swing para determinar cuándo mostrar una
información sobre herramientas y cuándo ocultarla.
Para realizar una tarea repetidamente.
Por ejemplo, puede realizar una animación o actualizar un componente que muestra el progreso hacia un objetivo.

Los temporizadores de oscilación son muy fáciles de usar. Cuando crea el temporizador, especifica un oyente de acción para que se le notifique
cuando el temporizador "se apaga". El actionPerformedmétodo en este oyente debe contener el código para cualquier tarea que necesite realizar.
Cuando crea el temporizador, también especifica el número de milisegundos entre los disparos del temporizador. Si desea que el temporizador se
active solo una vez, puede invocarlo setRepeats(false). Para iniciar el temporizador, llame a su startmétodo. Para suspenderlo, llame stop.

Tenga en cuenta que la tarea del temporizador Swing se realiza en el subproceso de envío de eventos. Esto significa que la tarea puede manipular
componentes de manera segura, pero también significa que la tarea debe ejecutarse rápidamente. Si la tarea puede tardar un tiempo en ejecutarse,
considere usar un SwingWorkertemporizador en lugar de o además de él. Consulte Concurrencia en Swing para obtener instrucciones sobre el uso
de la SwingWorkerclase e información sobre el uso de componentes Swing en programas de subprocesos múltiples.

Veamos un ejemplo del uso de un temporizador para actualizar periódicamente un componente. El TumbleItemapplet usa un temporizador para
actualizar su pantalla a intervalos regulares. (Para ver este applet ejecutándose, vaya a Cómo hacer applets . Este applet comienza creando y
comenzando un temporizador:

temporizador = nuevo temporizador (velocidad, esto);


timer.setInitialDelay (pausa);
timer.start ();

Las variables speedy pauserepresentan parámetros de applet; como se configuró en la otra página, estos son 100 y 1900 respectivamente, de modo
que el primer evento del temporizador ocurrirá en aproximadamente 1.9 segundos y se repetirá cada 0.1 segundos. Al especificar thiscomo el
segundo argumento para el Timerconstructor, TumbleItemespecifica que es el oyente de acción para eventos de temporizador.

Después de iniciar el temporizador, TumbleItemcomienza a cargar una serie de imágenes en un hilo de fondo. Mientras tanto, los eventos del
temporizador comienzan a ocurrir, haciendo que el actionPerformedmétodo se ejecute:

public void actionPerformed (ActionEvent e) {


// Si todavía se está cargando, no se puede animar.
if (! worker.isDone ()) {
regreso;
}

ranura de bucle ++;

if (loopslot> = nimgs) {
ranura de bucle = 0;
apagado + = desplazamiento;

si (apagado <0) {
off = ancho - maxWidth;
} else if (off + maxWidth> width) {
apagado = 0;
}
}

animator.repaint ();

if (loopslot == nimgs - 1) {
timer.restart ();
}
}

Hasta que se cargan las imágenes, worker.isDoneregresa false, por lo que los eventos del temporizador se ignoran efectivamente. La primera
parte del código de manejo de eventos simplemente establece los valores que se emplean en el paintComponentmétodo de control de animación :
loopslot(el índice del siguiente gráfico en la animación) y off(el desplazamiento horizontal del siguiente gráfico).

Finalmente, loopslotllegará al final de la matriz de imágenes y comenzará de nuevo. Cuando esto sucede, el código al final de
actionPerformedreinicia el temporizador. Hacer esto provoca un breve retraso antes de que la secuencia de animación comience nuevamente.

About Oracle | Contact Us | Legal Notices | Terms of Use | Your Privacy Rights | Cookie Preferences | Ad Choices

Copyright © 1995, 2019 Oracle and/or its affiliates. All rights reserved.

Previous page: How to Use Actions


Next page: How to Support Assistive Technologies

También podría gustarte