Java апплет. Стрелочные часы.

Владимир | | Java.

Этот пример демонстрирует базовые возможности библиотеки Graphics2D, которая используется для работы с двумерными изображениями. Здесь подробно описаны создание и работа апплета, представляющего собой стрелочные часы. На этом примере мы рассмотрим использование многих возможностей библиотеки: создание сложных геометрических форм, управление сглаживанием и прозрачностью, изменение рисунка в реальном времени, двойную буферизацию и др.

Апплет создаёт обычные стрелочные часы. Если заметите, что они показывают не то время, которое вы хотели бы видеть, просто измените время системных часов на вашем компьютере, и, максимум через секунду все будет нормально.

Посмотреть пример работающего апплета можно здесь.

Если апплет у вас не запустился, то, возможно, вам нужно установить Java Plug-in. Его установка происходит автоматически, когда вы устанавливаете J2SE JRE (java 2 standart edition java runtime environment) или SDK (software development kit). Скачать их можно с сайта Sun Microsystems.
Апплет тестировался с версиями 1.4.2_03 и 1.5.0_06.

Апплет создан с помощью NetBeans IDE 3.6

Подробно работа апплета описана в комментариях к исходным кодам. Здесь я хочу описать только на основные принципы работы апплета и особенности его использования.

В первую очередь рассмотрим, как встроить апплет в web-страницу.

<applet code=CircleClock.class archive="CircleClock.jar" width = 300 height = 300>
<param name=dialColor value="FFFEeFEFE">
<param name=hairLineColor value="FF42C151">
<param name=hoursNeedleColor value="7F000000">
<param name=minutesNeedleColor value="7F0000FF">
<param name=secondsNeedleColor value="7FFF0000">
</applet>

Первая строка стандартная. В ней задаются следующие параметры:

code — имя класса, содержащего метод init().
archive — имя архива, содержащего апплет (jar-файл).
width — ширина апплета.
height — высота апплета.

В принципе, ограничений на ширину и высоту нет (не допускаются только нулевые или отрицательные размеры). Размер стрелок и чёрточек на циферблате будет автоматически изменён, но делать апплет слишком маленьким просто нет смысла. По моим наблюдениям, при размерах 30х30 ещё что-то можно рассмотреть.

Кстати, высота не обязательно должна быть равна ширине. Если они отличаются, то диаметр циферблата будет выбран равным меньшей стороне, а сам циферблат — отцентрирован относительно большей. Чтобы посмотреть как это работает, задайте размер апплета 700х300 или 100х500.

Следующие пять параметров задают цвета стрелок, циферблата и чёрточек на циферблате.

При этом параметр name указывает название элемента, а параметр value — его цвет.

dialColor — цвет циферблата;
hairLineColor — цвет чёрточек на циферблате;
hoursNeedleColor — цвет часовой стрелки;
minutesNeedleColor — цвет минутной стрелки;
secondsNeedleColor — цвет секундной стрелки.

Как вы, наверное, догадались, цвета задаются в 16-тиричной системе счисления, а цветовая схема — ARGB (alpha, red, green, blue), т.е. первые две цифры задают прозрачность, вторые — красную составляющую цвета, третьи — зелёную, четвёртые — синюю.

При этом FF соответствует максимально насыщенному цвету (или нулевой прозрачности), а 00 — отсутствию данной составляющей в цвете (или 100% прозрачности).

Приведём несколько примеров:

FFFFFFFF — не прозрачный белый цвет;
7F000000 — чёрный цвет (~50% прозрачность);
7F0000FF — синий цвет (~50% прозрачность);
7F00FF00 — зелёный цвет (~50% прозрачность);

Если вы захотите какую-нибудь стрелку сделать не видимой, то просто сделайте первые две цифры равными «00» (100% прозрачность), цвет при этом можно задавать любой (все равно стрелка будет не видна).

Теперь рассмотрим как работает апплет.

При запуске апплета выполняется установка цветов, определение размеров, расчёт размеров стрелок, чёрточек на циферблате и т.д.

Далее нам необходимо с какой-то периодичностью обновлять содержимое апплета (т. е. определять текущее время и поворачивать стрелки). Для этого создаём параллельный поток (timer), который периодически вызывает функцию update().

При каждом обновлении апплета мы определяем время, рассчитываем углы поворота стрелок, и выполняем перерисовку окна апплета. На перерисовке я хочу остановиться подробнее. В принципе, можно рисовать каждую стрелку сразу в окне апплета, но при этом могут возникнуть мерцания. Поэтому лучше использовать следующий приём (т.н. двойную буферизацию): создаём рисунок (объект класса BufferedImage) с размерами апплета, рисуем на нем циферблат, стрелки и др., в окне апплета рисуем уже готовый рисунок.

Кстати, этот апплет использует библиотеку Java2D (пакет java.awt.Graphics2D). Она входит в состав платформы Java 2, т.е. это стандартная библиотека, но некоторые классы появились только в версии 1.4, поэтому с более старыми версиями могут быть проблемы.

Подробнее работа программы описана в комментариях и исходникам.

Скачать:

Исходный код апплета (clock_src.zip — 5,8 кБ)

Стрелочные часы (java-апплет, 6кБ).

Постовой

Интересная и перспективная работа в Украине

Работа в Киеве — множество открытых вакансий

  • Спасибо!

  • Odliudko

    Отлично!

  • SlavaChip

    Срочно нужно было разобраться в том как на страницу поместить вызов апплета Java.
    Именно с Вашей помощью дело сдвинулось с мертвой точки. Огромное спасибо.

    • Пожалуйста 🙂

      • SlavaChip

        А вот ведь какая ситуация, пять часов назад заказчик пояснил, что FireFox не в его вкусе и он предпочитает хром. И я влетел на пять часов в переинсталяции хрома и FireFox а теперь не знаю что делать, если верить разработчикам, то в Chrome уже не будет Java, а Firefox сразу вылетает как только я разрешаю контент Java в браузерах … По большому счету мне нужно на компьютере клиента читать и записывать файлы. Java по этой части меня очень даже устраивает. Можете что-то посоветовать как поступить, чтобы и в Firefox и в Chrome что-то работало?

        • Странно, у меня в Firefox Java апплеты работают. Попробуйте в настройках Java (Configure Java) включить логгирование.