Реализация простого апплета
В следующих примерах предполагается, что читатель имеет навыки
программирования на Java или на других объектно-ориентированных языках, и
подробно конструкции языка Java не обсуждаются.
Ниже представлен простой пример, демонстрирующий жизненный цикл апплета:
import java.awt.*; // импортируем классы для создания оконного
интерфейса
import java.applet.*; // импортируем классы для создания апплета
/**
* Этот класс демонстрирует жизненный цикл апплета.
* @author Веселов Роман
* @author Хивин Алексей
* @version beta
*/
public class Life extends Applet {
/**
* Это - конструктор.
* Он вызывается всегда при создании объекта данного класса.
*/
public Life() {
System.out.println("Constructor");
}
/**
* Данный метод вызывается первым.
* В нем проводится инициализация апплета.
*/
public void init() {
System.out.println("Method init()");
}
/**
* Вызывается вторым, после init().
* Вызывается также для перезапуска апплета.
* Начинает или продолжает выполнение.
*/
public void start() {
System.out.println("Method start()");
}
/**
* Вызывается, когда апплет остановлен.
* Приостанавливает выполнение.
*/
public void stop() {
System.out.println("Method stop()");
}
/**
* Вызывается, когда апплет завершается.
* Это - последний выполняемый метод.
* Выполняет завершающие действия.
*/
public void destroy() {
System.out.println("Method destroy()");
}
/**
* Вызывается, когда окно апплета должно быть перерисовано.
* Показывает содержимое окна (апплета).
* @param g графический контекст апплета.
*/
public void paint(Graphics g) {
g.drawString("Hello, world!",70,50);
System.out.println("Method paint()");
}
}
Откомпилировать программу можно командой:
>javac Life.java
Для интеграции апплета с HTML предусмотрен тег applet.
Далее показан синтаксис этого стандартного тега:
<APPLET
[CODEBASE = базовый URL-адрес кода апплета]
CODE=имя class-файла апплета
[ALT=альтернативный текст]
[NAME=имя экземпляра апплета]
WIDTH=ширина апплета в пикселях
HEIGHT=высота апплета в пикселях
[ALIGN=выравнивание апплета]
[VSPACE=пустой интервал выше и ниже апплета в пикселях]
[HSPACE=пустой интервал левее и правее апплета в пикселях]
>
[<PARAM name=имя атрибута(1) value=значение(1)>]
...
[<PARAM name=имя атрибута(n) value=значение(n)>]
[альтернативный текст в формате HTML]
</applet>
Например, для того, чтобы поместить апплет Life, рассмотренный в
предыдущей главе на вашу страничку вставьте следующий текст в
html-документ:
<APPLET CODE="Life.class" WIDTH="200" HEIGHT=100>
</APPLET>
Предполагается, что файл класса находится в одном каталоге с html-документом.
При открытии web-страницы броузеры автоматически запускают апплет,
но пользоваться web-броузерами в процессе отладки довольно неудобно.
К счастью, в пакет разработки SDK входит стандартная утилита appletviewer,
которая позволяет быстро и эффективно запускать апплеты. Это довольно
примитивный инструмент, который извлекает из html-документа тег <applet> и
запускает апплет на выполнение. Например, для запуска апплета Life
наберите в командной строке:
>appletviewer Life.htm
Вот как выглядит этот апплет:
Следующий учебный пример является более интересным и реализует простой
графический редактор:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/**
* Этот апплет реализует простой графический редактор.
* @author Хивин Алексей
* @author Веселов Роман
* @version beta
*/
public class SimpleGraphicEditor extends Applet {
private Canvas screen = new Canvas();//область для рисования
// группа переключателей цветов
private CheckboxGroup group = new CheckboxGroup();
private Checkbox
// красный переключатель
r = new Checkbox("красный",group,true),
// зеленый переключатель
g = new Checkbox("зеленый",group,false),
// синий переключатель
b = new Checkbox("синий",group,false);
// кнопка очистки области рисования
private Button clear = new Button("Очистить");
/**
* В это методе проводится инициализация апплета.
*/
public void init() {
// установка параметров апплета
setBackground(Color.lightGray);
// настройка компонентов
screen.setSize(300,200);
screen.setBackground(Color.white);
r.setForeground(Color.red);
g.setForeground(Color.green);
b.setForeground(Color.blue);
clear.addActionListener(new buttonListener());
screen.addMouseMotionListener(new scrListener());
// добавление компонентов на рабочую область
add(r);
add(g);
add(b);
add(screen);
add(clear);
}
// реализация слушателя события действий
private class buttonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
screen.repaint();
}
}
// реализация слушателя события перетаскивания
и перемещения мыши
private class scrListener implements MouseMotionListener {
public void mouseDragged(MouseEvent e) {
Graphics gr = screen.getGraphics();
if (group.getSelectedCheckbox()==r)
gr.setColor(Color.red);
else if (group.getSelectedCheckbox()==g)
gr.setColor(Color.green);
else
gr.setColor(Color.blue);
gr.fillOval(e.getX(),e.getY(),3,3);
}
public void mouseMoved(MouseEvent e) {
}
}
}
Вот что должно получиться:
|