Создание Java-апплета для отображения географических карт
Многие начинающие Java-программисты, после знакомства с базовыми возможностями и методами создания Java-апплетов, пробуют применить полученные знания для написания уже собственных апплетов - небольших программ, добавляемых к веб-странице. Итак, если вы тоже один из них, то сегодня мы попробуем вместе создать свой несложный апплет для отображения географической карты. Целью создания данного приложения будет то, что часто требуется разместить план или карту того или иного объекта больших размеров. И поскольку детальное изображение не будет вписываться в дизайн и приведет к медленной загрузке веб-странички, то большинство HTML-программистов прибегает к использованию тега Поэтому первое, с чего мы пожалуй начнем проектирование апплета - разработаем структуру файла конфигурации. Итак, Map.dat будет содержать названия графических файлов разных частей карты и координаты областей, где пользователь по щелчку мыши сможет получить "увеличенную" картинку. Следуя нашему техническому заданию разобъем файл на две части: глобальный вид и детальные изображения с координатами. Итак, получим примерно следущее: # Global map picture Листинг 1. Файл Map.dat Используя знак "#" можно будет отделять комментарии от остального содержания файла. Теперь начнем проектировать непосредственно сам Java-апплет. Создайте файл нашего будущего класса Map.java. И поместите туда следущее: import java.applet.*; Листинг 2. Класс Map.java Как видите из комментариев (Листинг 2) дело осталось за малым: прочитать файл конфигурации и в соответствии с полученными значениями отобразить карту. Начнем с первого. Создадим метод getData() для чтения файла конфигурации Map.dat. Для доступа к файловой системе (чтение файла) нам потребуется использовать классы InputStream и StreamTokenizer из пакета java.io. Класс StreamTokenizer реализует простой лескический сканер, который разбивает поток символов InputStream на лексемы (слова). Это полезно для нас так как наш файл Map.dat содержит различные лексемы: координаты областей в виде чисел и названия файлов. Создав фильтр, можно воспользоваться методом nextToken() для чтения лексем. Он возвращает либо символ, либо константу: StreamTokenizer.TT_EOF, StreamTokenizer.TT_NUMBER, StreamTokenizer.TT_WORD. Фильтрацию комментариев, которые у нас начинаются с символа "#", можно просто осуществить при помощи метода commentChar(). Текст метода будет следующим: /** Листинг 3. Метод getData() Вы должны были заметить, что в приведенном коде встретились еще необъясненные поля lPoint и rPoint. Это массивы класса Point в которых мы будем хранить точки, считанные из файла. Класс Point, описанный как часть пакета awt, представляет собой структуру данных, которая может хранить координаты X,Y. mapFile - строковый массив для хранения имен файлов. Теперь приступим к getMap(). В качестве параметра вызова этого метода будет имя файла pic, который требуется показать. После загрузки картинки не забудем перерисовать апплет при помощи repaint(); /** Листинг 4. Методы getMap(), update() и paint()
Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=5955 |