Категории:

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

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

Оглавление

Апплет 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)