Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Часть 7. Разработка Java-апплетов

Читайте также:
  1. Betfair для начинающих. Часть вторая
  2. Betfair для начинающих. Часть первая
  3. Betfair для начинающих. Часть третья
  4. Betfair для начинающих. Часть четвертая
  5. FM передатчик начинающего радиопирата. Часть№2
  6. I часть
  7. II Практическая часть
  8. II часть
  9. II. Основная часть
  10. II. ОСНОВНАЯ ЧАСТЬ

 

Апплет является мини-приложением, запускаемым с помощью браузера. Все апплеты являются подклассами java.applet.Applet, наследующего атрибуты от java.awt.Panel и java.awt.Component. Поэтому создание апплетов больше похоже на разработку графического компонента, в нем также отсутствует точка начала выполнения – метод main(). Для разработки апплетов требуется создание подкласса Applet и несколько стандартных методов:

· Init() – вызывается при первой загрузке апплета в браузер для его инициализации;

· Destroy() – вызывается перед выгрузкой апплета из браузера для освобождения ресурсов;

· Start() – вызывается, когда апплет становится видимым и начинает выполнять события;

· Stop() – вызывается, когда апплет временно невидим, выполнение задачи прекращается;

· GetAppletInfo() – вызывается для получения информации об апплете, возвращает строковые данные;

· GetParameterInfo() – вызывается для получения информации о параметрах апплета, возвращает строку, описывающую параметры;

· GetImage() – загружает из сети файл с изображением и возвращает объект java.awt.Image;

· GetAudioClip() – загружает из сети звуковой клип и возвращает объект java.applet.AudioClip;

· GetParameter() – ищет и возвращает значение именованного параметра файла HTML;

· GetCodeBase() – возвращает URL, с которого был загружен файл с классом апплета;

· GetDocumentBase() - возвращает URL HTML-файла, который ссылается на апплет;

· ShowStatus() – отображает сообщение в строке браузера;

· GetAppletContext() – возвращает объект, соответствующий апплету.

 

Пример 7.1. Простой апплет с использованием графического метода.

 

package FirstApplet.java;import java.applet.*; // для создания апплетаimport java.awt.*; // для работы с графикой /** Апплет, выводящий сообщение "Мой первый апплет! */public class FirstApplet extends Applet { // метод для отображения апплета public void paint(Graphics g) { g.drawString("Мой первый апплет! ", 25, 50); }}

 

Для его отображения необходимо создать HTML-файл, содержащий ссылку на апплет: <applet code=” FirstApplet.java.FirstApplet.class ”

codebase=”../../../../”

width=150 height=100>

</applet>

 

Пример 7.2. Апплет отображает текущее время в компоненте Label.

 

package Clock.java;import java.applet.*; // создание апплетаimport java.awt.*; // для работы с графикойimport java.util.Date; // для сигналов времениimport java.text.DateFormat; // для отображения /** * апплет обновляет время каждую секунду **/public class Clock extends Applet implements Runnable { Label time; // компонент, отображающий время DateFormat timeFormat; // преобразование данных в строку Thread timer; // поток, обновляющий время volatile boolean running; // флаг остановки потока /** * метод init() вызывается при запуске апплета браузером * настраивает компонент Label и получает объект DateFormat **/ public void init() { time = new Label(); time.setFont(new Font("helvetica", Font.BOLD, 12)); time.setAlignment(Label.CENTER); setLayout(new BorderLayout()); add(time, BorderLayout.CENTER); timeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM); } /** * браузер вызывает метод для запуска апплета. * используется поток для обновления времени **/ public void start() { running = true; // установка флага if (timer == null) { // пока нет потока timer = new Thread(this); // создание потока timer.start(); // запуск потока } } /** * метод интерфейса Runnable. Тело потока, который обновляет данные * раз в секунду **/ public void run() { while(running) { // цикл, пока не остановят // получение данных времени в строке с отображением в Label time.setText(timeFormat.format(new Date())); // задержка в 1000 миллисекунд try { Thread.sleep(1000); } catch (InterruptedException e) {} } // при завершении потока устанавливаем null, чтобы начать снова // методом start(). timer = null; } /** * браузер вызывает метод для завершения работыапплета * с установкой флага методу run() **/ public void stop() { running = false; } /** * возвращение информации об апплете **/ public String getAppletInfo() { return "Clock applet Copyright (c) 2010 "; }}

 

Пример 7.3. Апплет, обрабатывающий события пользователя и выводящий информацию о них.

 

package EventTester.java;import java.applet.*;import java.awt.*;import java.util.*; /** Апплет, выводящий подробную информацию о событиях */public class EventTester extends Applet { // события мыши public boolean mouseDown(Event e, int x, int y) { showLine(mods(e.modifiers) + "Mouse Down: [" + x + "," + y + "]"); return true; } public boolean mouseUp(Event e, int x, int y) { showLine(mods(e.modifiers) + "Mouse Up: [" + x + "," + y + "]"); return true; } public boolean mouseDrag(Event e, int x, int y) { showLine(mods(e.modifiers) + "Mouse Drag: [" + x + "," + y + "]"); return true; } public boolean mouseMove(Event e, int x, int y) { showLine(mods(e.modifiers) + "Mouse Move: [" + x + "," + y + "]"); return true; } public boolean mouseEnter(Event e, int x, int y) { showLine("Mouse Enter: [" + x + "," + y + "]"); return true; } public boolean mouseExit(Event e, int x, int y) { showLine("Mouse Exit: [" + x + "," + y + "]"); return true; } // события смены фокуса public boolean gotFocus(Event e, Object what) { showLine("Got Focus"); return true; } public boolean lostFocus(Event e, Object what) { showLine("Lost Focus"); return true; } // события нажатия кнопок public boolean keyDown(Event e, int key) { int flags = e.modifiers; if (e.id == Event.KEY_PRESS) // обычная клавиша showLine("Key Down: " + mods(flags) + key_name(e)); else if (e.id == Event.KEY_ACTION) // функциональная клавиша showLine("Function Key Down: " + mods(flags) + function_key_name(key)); return true; } public boolean keyUp(Event e, int key) { int flags = e.modifiers; if (e.id == Event.KEY_RELEASE) // обычная showLine("Key Up: " + mods(flags) + key_name(e)); else if (e.id == Event.KEY_ACTION_RELEASE) // функциональная showLine("Function Key Up: " + mods(flags) + function_key_name(key)); return true; } // методы модификаторов и клавиш // текущий список клавиш-модификаторов private String mods(int flags) { String s = "[ "; if (flags == 0) return ""; if ((flags & Event.SHIFT_MASK)!= 0) s += "Shift "; if ((flags & Event.CTRL_MASK)!= 0) s += "Control "; if ((flags & Event.META_MASK)!= 0) s += "Meta "; if ((flags & Event.ALT_MASK)!= 0) s += "Alt "; s += "] "; return s; } // обычная клавиша private String key_name(Event e) { char c = (char) e.key; if (e.controlDown()) { // Если CTRL, то обработка управляющих if (c < ' ') { c += '@'; return "^" + c; } } else { // Если нет CTRL, то обработка управляющих ASCII switch (c) { // символов case '\n': return "Return"; case '\t': return "Tab"; case '\033': return "Escape"; case '\010': return "Backspace"; } } // остальные варианты if (c == '\177') return "Delete"; else if (c == ' ') return "Space"; else return String.valueOf(c); } // возвращение имени функциональной клавиши и // сравнение с константами в классе Event. private String function_key_name(int key) { switch(key) { case Event.HOME: return "Home"; case Event.END: return "End"; case Event.PGUP: return "Page Up"; case Event.PGDN: return"Page Down"; case Event.UP: return "Up"; case Event.DOWN: return "Down"; case Event.LEFT: return "Left"; case Event.RIGHT: return "Right"; case Event.F1: return "F1"; case Event.F2: return "F2"; case Event.F3: return "F3"; case Event.F4: return "F4"; case Event.F5: return "F5"; case Event.F6: return "F6"; case Event.F7: return "F7"; case Event.F8: return "F8"; case Event.F9: return "F9"; case Event.F10: return "F10"; case Event.F11: return "F11"; case Event.F12: return "F12"; } return "Unknown Function Key"; } /** список строк для отображения */ protected Vector lines = new Vector(); /** добавление новой строки */ protected void showLine(String s) { if (lines.size() == 20) lines.removeElementAt(0); lines.addElement(s); repaint(); } /** метод перерисовывает текст окна */ public void paint(Graphics g) { for(int i = 0; i < lines.size(); i++) g.drawString((String)lines.elementAt(i), 20, i*16 + 50); }}

 

Пример 7.4. Апплет, позволяющий рисовать с помощью мыши выбранным цветом и цветом фона.

 

package ColorScribble.java;import java.applet.*;import java.awt.*; /** * Апплет Scribble считывает параметры цвета рисования и фона**/public class ColorScribble extends Scribble { // считывание параметров и установка цвета public void init() { super.init(); // инициализация базового класса Color foreground = getColorParameter("foreground"); Color background = getColorParameter("background"); if (foreground!= null) this.setForeground(foreground); if (background!= null) this.setBackground(background); } // считывание параметров задания цветов в 16-ричном коде protected Color getColorParameter(String name) { String value = this.getParameter(name); try { return new Color(Integer.parseInt(value, 16)); } catch (Exception e) { return null; } } // информация для отображения public String getAppletInfo() { return "ColorScribble v. 0.03. Written by David Flanagan."; } // информация о параметрах public String[][] getParameterInfo() { return info; } // информация, возвращаемая методом getParameterInfo() // в виде массива строк: имя, тип, описание. private String[][] info = { {"foreground", "hexadecimal color value", "foreground color"}, {"background", "hexadecimal color value", "background color"} };}

 

Апплет запускается HTML-файлом, содержащим:

<applet code=” ColorScribble.java.ColorScribble.class”

Codebase=”../../../../” width=400 height=400>

<param name=”foreground” value=”FF0000”>

<param name=”background” value=”CCFFCC”>

</applet>

 

Пример 7.5. Апплет, реализующий отображение карты изображений с подсветкой активного участка и воспроизведением звукового клипа.

 

package Soundmap.java;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.net.*;import java.util.*; /** * Апплет воспроизводит звук при нажатии на изображение. */public class Soundmap extends Applet implements MouseListener { protected Image image; // изображение. protected Vector rects; // список прямоугольников. protected AudioClip sound; // воспроизводимый звук protected ImagemapRectangle highlight; // подсвеченный прямоугольник /** инициализация апплета */ public void init() { // имя изображения относительно URL, и его загрузка. image = this.getImage(this.getDocumentBase(), this.getParameter("image")); // список прямоугольных участков и их URL. // вспомогательная программа getRectangleParameter(). rects = new Vector(); ImagemapRectangle r; for(int i = 0; (r = getRectangleParameter("rect" + i))!= null; i++) rects.addElement(r); // поиск звукового сигнала при выборе участка изображения. sound = this.getAudioClip(this.getDocumentBase(), this.getParameter("sound")); // назначение слушателя событий this.addMouseListener(this); } /** * вызывается при выгрузке апплета с освобождением ресурсов. **/ public void destroy() { image.flush(); } /** * для отображения апплета рисуем изображение **/ public void paint(Graphics g) { g.drawImage(image, 0, 0, this); if (highlight!= null) { g.setColor(Color.red); g.drawRect(highlight.x, highlight.y, highlight.width, highlight.height); g.drawRect(highlight.x+1, highlight.y+1, highlight.width-2, highlight.height-2); } } /** * замещение метода для сохранения фона перед вызовом * метода paint(). **/ public void update(Graphics g) { paint(g); } /** * анализ списка координат и URL. **/ protected ImagemapRectangle getRectangleParameter(String name) { int x, y, w, h; URL url; String value = this.getParameter(name); if (value == null) return null; try { StringTokenizer st = new StringTokenizer(value, ","); x = Integer.parseInt(st.nextToken()); y = Integer.parseInt(st.nextToken()); w = Integer.parseInt(st.nextToken()); h = Integer.parseInt(st.nextToken()); url = new URL(this.getDocumentBase(), st.nextToken()); } catch (NoSuchElementException e) { return null; } catch (NumberFormatException e) { return null; } catch (MalformedURLException e) { return null; } return new ImagemapRectangle(x, y, w, h, url); } /** метод вызывается при нажатии кнопки мыши */ public void mousePressed(MouseEvent e) { // место нахождения. // подсветка прямоугольника. // воспроизведение звука и сообщения. ImagemapRectangle r = findrect(e); // если прямоугольник найден, но не подсвечен if (r!= null && r!= highlight) { highlight = r; // запомнить showStatus("To: " + r.url); // отобразить URL sound.play(); // звуковой сигнал repaint(); // перерисовка для подсвечивания } } /** отпускание кнопки мыши. */ public void mouseReleased(MouseEvent e) { // если отпущена над выделенным прямоугольником, // то браузер покажет URL. // возврат к исходному if (highlight!= null) { ImagemapRectangle r = findrect(e); if (r == highlight) getAppletContext().showDocument(r.url); showStatus(""); // очистка сообщения highlight = null; // подсветка прекращена repaint(); // перерисовка } } /** неиспользуем методы интерфейса MouseListener */ public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} /** поиск прямоугольника. */ protected ImagemapRectangle findrect(MouseEvent e) { int i, x = e.getX(), y = e.getY(); for(i = 0; i < rects.size(); i++) { ImagemapRectangle r = (ImagemapRectangle) rects.elementAt(i); if (r.contains(x, y)) return r; } return null; } /** * вспомогательный класс похожий на java.awt.Rectangle **/ static class ImagemapRectangle extends Rectangle { URL url; public ImagemapRectangle(int x, int y, int w, int h, URL url) { super(x, y, w, h); this.url = url; } }}

 




Дата добавления: 2015-09-11; просмотров: 28 | Поможем написать вашу работу | Нарушение авторских прав

Пример 2.20. | Пример 2.21. | Пример 2.26. | Пример 3.1. | Пример 3.4. Обработка изображений. | Пример 3.5. Улучшенная анимация. | Пример 3.6. | Пример 4.1. | Простая сериализация. | Пример 5.3. |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав