Spec-Zone .ru
спецификации, руководства, описания, API
|
Таймер Swing (экземпляр javax.swing.Timer
) огни одно или более событий действия после указанной задержки. Не путайте таймеры Swing со средством таймера общего назначения, которое было добавлено к java.util
пакет в выпуске 1.3. Эта страница описывает только таймеры Swing.
Вообще, мы рекомендуем использовать таймеры Swing, а не таймеры общего назначения для связанных с GUI задач, потому что таймеры Swing вся доля, которую то же самое, существующий ранее поток таймера и связанная с GUI задача автоматически выполняют на событии - диспетчеризируют поток. Однако, Вы могли бы использовать таймер общего назначения, если Вы не планируете касание GUI от таймера, или должны выполнить долгую обработку.
Можно использовать таймеры Swing двумя способами:
Таймеры Swing очень удобны. Когда Вы создаете таймер, Вы определяете слушателя действия, чтобы быть уведомленными, когда таймер "уходит". actionPerformed
метод в этом слушателе должен содержать код для любой задачи, Вы должны быть выполнены. Когда Вы создаете таймер, Вы также определяете число миллисекунд между взрывами таймера. Если Вы хотите, чтобы таймер ушел только однажды, можно вызвать setRepeats(false)
на таймере. Чтобы запустить таймер, вызовите start
метод. Чтобы приостановить это, вызвать stop
.
Отметьте, что задача таймера Swing выполняется, в конечном счете диспетчеризируют поток. Это означает, что задача может безопасно управлять компонентами, но это также означает, что задача должна выполниться быстро. Если задача могла бы требовать времени, чтобы выполниться, то рассмотрите использование a SwingWorker
вместо или в дополнение к таймеру. См. SwingWorker
class и информация об использовании компонентов Swing в многопоточных программах.
Давайте смотреть на пример использования таймера, чтобы периодически обновить компонент.
апплет использует таймер, чтобы обновить его дисплей равномерно. (Чтобы видеть, что этот апплет работает, пойдите в то, Как Сделать Апплеты. Этот апплет начинается, создавая и запуская таймер:TumbleItem
timer = new Timer(speed, this); timer.setInitialDelay(pause); timer.start();
speed
и pause
переменные представляют параметры апплета; как конфигурирующийся на другой странице, они 100 и 1900 соответственно, так, чтобы событие впервые приехавшего имело место приблизительно через 1.9 секунды, и повторяться каждую 0.1 секунды. Определяя this
как второй параметр Timer
конструктор, TumbleItem
определяет, что это - слушатель действия для событий таймера.
После запуска таймера, TumbleItem
начинает загружать серию изображений в фоновом потоке. Тем временем события таймера начинают иметь место, вызывая actionPerformed
метод, чтобы выполниться:
public void actionPerformed(ActionEvent e) { //If still loading, can't animate. if (!worker.isDone()) { return; } loopslot++; if (loopslot >= nimgs) { loopslot = 0; off += offset; if (off < 0) { off = width - maxWidth; } else if (off + maxWidth > width) { off = 0; } } animator.repaint(); if (loopslot == nimgs - 1) { timer.restart(); } }
Пока изображения не загружаются, worker.isDone
возвраты false
, таким образом, события таймера эффективно игнорируются. Первая часть кода обработки событий просто устанавливает значения, которые используются в управлении анимацией paintComponent
метод: loopslot
(индексирование следующей графики в анимации) и off
(горизонтальное смещение следующей графики).
В конечном счете, loopslot
достигнет конец изображения выстраивают и запускаются. Когда это происходит, код в конце actionPerformed
перезапускает таймер. Выполнение этого вызывает малую задержку прежде, чем последовательность анимации начнется снова.