Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

5. Апплеты двойного назначения

Апплеты двойного назначения - это программа, которая может работать и под управлением WWW-навигатора, и автономно, как самостоятельное приложение. Создать апплеты двойного назначения, объединяющие функциональные возможности апплета и приложения в одном программном коде, достаточно легко. Следует лишь ввести оба метода main() и init() в одну и ту же программу, при этом выполняя в методе main() некоторые специфические действия.

Прежде всего в методе main() необходимо создать рамку окна, в котором будет отображаться вся графика (для создания рамки используется подкласс класса Frame, в котором как минимум переопределен метод-обработчик событий). Затем создать экземпляр класса апплета и связать его рамкой (фреймом). С помощью экземпляра апплета можно вызвать методы init() и start(), запуская апплет в методе main() так, как обычно это делает WWW-навигатор.

Нужно напомнить, что приложения не принимают параметры через HTML-файл, как это делает апплет. И следовательно, придется передавать приложению все параметры в одной командной строке, как это обычно делается с аргументами стандартной командой строки. Т.е. передача параметров такому апплету двойного назначения должна дублироваться при помощи командной строки и при помощи тега <PARAM> HTML-файла.

Апплеты двойного назначения полезны в случае, если есть программа и необходимо, чтобы она работала и как апплет, и как приложение, без написания двух отдельных ее версий.

Создадим апплет двойного назначения Combi (пример 9) при помощи системы Java Applet Wizard. Для подготовки шаблона апплета двойного назначения в первой диалоговой панели нужно установить переключатель “As on applet and as on application”.

Рассмотрим тексты файлов, созданные системой Java Applet Wizard. Тексты подобных шаблонных файлов содержатся в Приложении 4 и их можно в дальнейшем использовать в качестве шаблонов апплета двойного назначения.

Пример 9. Файлa, созданный Java Applet Wizard

Листинг Java-файла первичного класса:

//*************************************************************

// Combi.java: Applet

//

//*************************************************************

import java.applet.*;

import java.awt.*;

import CombiFrame; // импорт класса рамки (фрейма)

public class Combi extends Applet

{

// ПОДДЕРЖКА РАБОТЫ ПРОГРАММЫ КАК ПРИЛОЖЕНИЯ:

// Признак режима работы программы:

// true - работа в качестве приложения

// false - работа в качестве апплета

//--------------------------------------------------------

private boolean m_fStandAlone = false;

// ПОДДЕРЖКА РАБОТЫ ПРОГРАММЫ КАК ПРИЛОЖЕНИЯ:

// Метод main() - точка входа в случае работы программы как

// приложения. Если программа загружается при помощи

// документа HTML, то этот метод игнорируется

//--------------------------------------------------------

public static void main(String args[])

{ // Здесь можно обработать аргументы

// командной строки, если они есть

// Создать рамку (фрейм) для апплета. Класс CombiFrame

// наследуется от класса Frame, в нем как минимум

// переопределяется метод завершение работы приложения

//------------------------------------------------

CombiFrame frame = new CombiFrame("Combi");

// До изменения размеров фрейма отобразить его.

// Это необходимо для того, чтобы метод insert()

// выдавал правильные значения

//------------------------------------------------

frame.show(); frame.hide();

frame.resize(frame.insets().left + frame.insets().right + 320,

frame.insets().top + frame.insets().bottom + 240);

// Создание объекта апплета, связывание апплета и фрейма

//------------------------------------------------

Combi applet_Combi = new Combi();

frame.add("Center", applet_Combi);

// Установление признака режима работы - приложение

//------------------------------------------------

applet_Combi.m_fStandAlone = true;

// Вызов методов ааплета для его запуска

//------------------------------------------------

applet_Combi.init();

applet_Combi.start();

// Отображение окна фрейма

//------------------------------------------------

frame.show();

}

//--------------------------------------------------------

public Combi()

{

// Сделать: Добавьте сюда код конструктора

}

//--------------------------------------------------------

public String getAppletInfo()

{

return "Name: Combi\r\n" +

"";

}

//--------------------------------------------------------

public void init()

{ //------------------------------------------------

resize(320, 240);

// Сделать: Добавьте сюда код инициализации

}

//--------------------------------------------------------

public void destroy()

{

// Сделать: Добавьте сюда код завершения работы апплета

}

//--------------------------------------------------------

public void paint(Graphics g)

{

g.drawString("Created with Microsoft Visual J++ Version 1.1",10, 20);

}

//--------------------------------------------------------

public void start()

{

// Сделать: Добавьте сюда код, который должен

// работать при запуске апплета

}

//--------------------------------------------------------

public void stop()

{

// Сделать: Добавьте сюда код, который должен

// работать при остановке апплета

}

// Сделать: Добавьте сюда код, необходимый для работы

// создаваемого специализированного апплета

}

Листинг Java-файла класса фрейма для апплета:

//**************************************************************

// CombiFrame.java:

//

//**************************************************************

import java.awt.*;

// ПОДДЕРЖКА РАБОТЫ ПРОГРАММЫ КАК ПРИЛОЖЕНИЯ:

// Этот класс действует как окно, в котором отображается апплет,

// когда он запускается как обычное приложение

//============================================

class CombiFrame extends Frame

{

// Конструктор класса CombiFrame

//--------------------------------------------------------

public CombiFrame(String str)

{

// Сделать: Добавьте сюда код конструктора

// Вызов конструктора базового класса должен быть

// первым оператором конструктора подкласса

super (str);

}

// Метод-обработчик handleEvent() обрабатывает все события,

// получаемые окном фрейма. В этом методе можно обрабатывать

// все оконные события. Для обработки событий, генерируемых

// меню, кнопками и другими элементами управления

// используется метод action()

//--------------------------------------------------------

public boolean handleEvent(Event evt)

{

switch (evt.id)

{

// при закрытии окна завершается работа приложения

//-------------------------------------------------

case Event.WINDOW_DESTROY:

// Сделать: Добавьте сюда код, который должен

// работать при остановке приложения

dispose(); // удаление окна

System.exit(0); // завершение приложение

return true;

default:

// передача сообщения на обработку

// методу базового класса

return super.handleEvent(evt);

}

}

}

Модифицируйте метод paint() так, чтобы в окне апплета выводился режим работы программы: “Application” или “Applet".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]