Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Использование Других Функций Swing
Как Использовать Таймеры Swing
Домашняя страница > Создание GUI С JFC/Swing > Использование Других Функций Swing

Как Использовать Таймеры Swing

Таймер 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 вместо или в дополнение к таймеру. См. Параллелизм в Swing для инструкций об использовании 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 перезапускает таймер. Выполнение этого вызывает малую задержку прежде, чем последовательность анимации начнется снова.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать Действия
Следующая страница: Как к Support Assistive Technologies