Конвертация приложений в апплеты

Оглавление

Апплет HelloWorld. 3

Конвертация приложений в апплеты.. 3

Жизненный цикл апплета. 4

Обработка событий. 5

UI-компоненты.. 6

Методы для работы с UI-компонентами. 6

Пример работы с UI-компонентом.. 7

Задание. 9

Java-апплет — это прикладная программа на Java в форме байт-кода. Java-апплеты выполняются в веб-браузере с использованием виртуальной Java машины (JVM), или в Sun's AppletViewer, автономном инструменте для тестирования апплетов. Java-апплеты были внедрены в первой версии языка Java в 1995.

Апплеты используются для предоставления интерактивных возможностей веб-приложений, которые не могут быть предоставлены HTML. Так как байт-код Java платформо-независим, то Java-апплеты могут выполняться браузерами многих платформ.

Java-апплеты в большинстве браузеров выполняются в «песочнице», предотвращая их доступ к локальным данным. Код апплета загружается с веб-сервера, и браузер либо вставляет апплет в веб-страницу, либо открывает новое окно с собственным пользовательским интерфейсом апплета. Апплет может быть отображен на веб-странице путем использования устаревшего HTML элемента applet, или рекомендуемого элемента object. Этим определяется месторасположение и источник апплета.

Главный класс апплета расширяет класс java.applet.Applet или, если создаётся Swing апплет, javax.swing.JApplet. Класс должен переопределить методы создания пользовательского интерфейса внутри себя. (Applet является потомком Panel, который, в свою очередь, является потомком Container).

Преимущества использования Java-апплетов

· кроссплатформенность

· апплет может работать на «всех» установленных к этому времени версиях Java, а не только с последней версией; однако, если апплет требует последнюю версию JRE, то клиент будет вынужден ждать более длительной загрузки;

· апплет поддерживается большинством браузеров;

· он кэшируется в большинстве браузеров, а потому будет быстро загружаться при возвращении на веб-страницу; но апплет может сохраняться в кэше и создавать проблемы после выхода новых версий;

· он может иметь полный доступ к машине, на которой выполняется, если пользователь согласен на это;

· он может запуститься с сопоставимой (но обычно медленнее) скоростью на других компилируемых языках, таких как C++, но во много раз быстрее, чем JavaScript

· он может перенести работу с сервера к клиенту, делая Интернет-решение с, большим числом пользователей / клиентов.

Java-апплет обладает следующими недостатками:

· он требует установки Java-расширения (plug-in), который не во всех браузерах доступен по умолчанию;

· реализация, принятая в Java-plug-in компании Sun, не существует для 64-разрядных процессоров;

· он не может запуститься до тех пор, пока не запустится виртуальная Java-машина, и это может занять значительное время при первом запуске;

· создание и дизайн хорошего пользовательского интерфейса с использованием апплетов считается более сложной задачей, чем с помощью технологии, основанной на HTML;

· из-за ненадежности апплета, для него существенно ограничивается доступ к пользовательской системе: в частности, он не имеет прямого доступа к диску клиента или буферу обмена;

· некоторые организации допускают только программное обеспечение, установленное администраторами. В результате многие пользователи не могут видеть апплеты по умолчанию.

· апплеты могут потребовать использования определенного JRE.

Апплет HelloWorld

import javax.swing.JApplet;

import java.awt.Graphics;

public class HelloWorld extends JApplet {

public void paint(Graphics g) {

g.drawRect(0, 0,

getSize().width - 1,

getSize().height - 1);

g.drawString("Hello world!", 5, 15);

}

}

Данный код необходимо запустить в режиме Run as Java Applet. В итоге на экране появится окно appletviewer, в котором будет написана лишь одна строчка: « Hello world!».

Если апплет использует GUI компоненты из Swing, необходимо наследование от javax.swing.JApplet.

В случае, если Swing не используется, можно наследоваться от java.applet.Applet.

Конвертация приложений в апплеты

Как нетрудно заметить, вышеизложенный код не содержит метода main. В этом апплеты значительно отличаются от обычных приложений, в которых есть, по крайней мере, один класс с методом main. Вместо этого в апплетах за время исполнения вызываются несколько разных методов.

Что нужно, чтобы превратить приложение в апплет:

· Нужно создать класс-наследник java.applet.Applet, в котором переопределить метод init, в котором проинициализировать все необходимые ресурсы (точно так же, как это происходило в методе main).

· Метод init может вызываться многократно (в отличие от метода main), следует учесть это при его проектировании. + Panel (если используется таковая) на вершине иерархии должна добавляться в апплет в методе init (так же как это обычно происходило в методе main).

Вот и всё!

Замечания:

· Класс апплета объявлен как public (чтобы appletviewer имел к нему доступ).

· Апплет наследуется от Applet/JApplet, а приложение от Frame/JFrame.

· У апплета нет метода main.

· В апплете конструктор заменен методами start and init methods.

· GUI компоненты добавляются напрямую в Applet, в то время как в случае с обычным приложением эти компоненты добавляются в content JFrame'a.

Жизненный цикл апплета

import java.applet.Applet;

import java.awt.Graphics;

// Нет необходимости наследовать от JApplet, т.к. компоненты не добавляются —

// проиcходит просто отрисовка

public class Simple extends Applet {

StringBuffer buffer;

public void init() {

buffer = new StringBuffer();

addItem("initializing... ");

}

public void start() {

addItem("starting... ");

}

public void stop() {

addItem("stopping... ");

}

public void destroy() {

addItem("preparing for unloading...");

}

private void addItem(String newWord) {

System.out.println(newWord);

buffer.append(newWord);

repaint();

}

public void paint(Graphics g) {

// Рисуем прямоугольник

g.drawRect(0, 0,

getWidth() - 1,

getHeight() - 1);

// Отрисовываем строчку внутри прямоугольника

g.drawString(buffer.toString(), 5, 15);

}

}

Таким образом, апплет может:

· Инициализировать себя (метод init).

· Начать работу (метод start).

· Перестать работать (метод stop). Происходит, когда пользователь открывает другую страницу. Если же он возращается назад выполняется метод start.

· Произвести финальную очистку данных перед тем как выгрузиться (cначала выполняется метод stop, потом destroy). Происходит, к примеру, при перезагрузке апплета (обновлении страницы).

При этом совсем не обязательно, чтобы программист переопределял сразу все эти методы.

Обработка событий

import java.awt.event.MouseListener;

import java.awt.event.MouseEvent;

import java.applet.Applet;

import java.awt.Graphics;

// Нет необходимости наследовать от JApplet, т.к. компоненты не добавляются —

// проиcходит просто отрисовка

public class SimpleClick extends Applet

implements MouseListener {

StringBuffer buffer;

public void init() {

addMouseListener(this);

buffer = new StringBuffer();

addItem("initializing... ");

}

public void start() {

addItem("starting... ");

}

public void stop() {

addItem("stopping... ");

}

public void destroy() {

addItem("preparing for unloading...");

}

void addItem(String newWord) {

System.out.println(newWord);

buffer.append(newWord);

repaint();

}

public void paint(Graphics g) {

// Рисуем прямоугольник

g.drawRect(0, 0,

getWidth() - 1,

getHeight() - 1);

// Отрисовываем строчку внутри прямоугольника

g.drawString(buffer.toString(), 5, 15);

}

// Следующая группы пустых методов может быть удалена в случае реализации

// MouseAdapter

public void mouseEntered(MouseEvent event) {

}

public void mouseExited(MouseEvent event) {

}

public void mousePressed(MouseEvent event) {

}

public void mouseReleased(MouseEvent event) {

}

public void mouseClicked(MouseEvent event) {

addItem("click!... ");

}

}

Как видно, нет никаких разительных отличий обработки событий от обычных приложений. При нажатии кнопкой мыши, появиться надпись «click!... ».

UI-компоненты

· Buttons (javax.swing.JButton)

· Checkboxes (javax.swing.JCheckBox)

· Single-line text fields (javax.swing.JTextField)

· Larger text display and editing areas (javax.swing.JTextArea)

· Labels (javax.swing.JLabel)

· Lists (javax.swing.JList)

· Pop-ups (javax.swing.Popup)

· Scrollbars (javax.swing.JScrollBar)

· Sliders (javax.swing.JSlider)

· Drawing areas (java.awt.Canvas)

· Menus (javax.swing.JMenu,javax.swing.JMenuBar javax.swing.JMenuItem, javax.swing.JCheckBoxMenuItem)

· Containers (javax.swing.JPanel, javax.swing.JWindow and its subclasses)

Наши рекомендации