Назад
Вперед
2.7. Комбинированное приложение с окном Frame
В примере демонстрируется способ создания окна
Frame в комбинированном приложении Java, способном
работать как автономно, так и под управлением
браузера в виде аплета.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java)
Немного теории
Для того чтобы создать комбинированное
приложение с унифицированным интерфейсом, не
зависящим от текущего режима работы (консольное
или аплет), удобно использовать окна класса Frame.
Ваше приложение может отображать такое окно на
экране и использовать его для диалога с
пользователем. Внешний вид окна будет
практически одинаковый как в консольном режиме,
так и в режиме аплета.
Описание примера
Комбинированное приложение создает окно
класса Frame, показанное на рис. 1 для режима аплета.
Рис. 1. Окно Frame window
Рассмотрим исходные тексты аплета.
Класс CombiFrame
Класс AppletFrame является главным в нашем аплете. В
нем определено поле frame класса FrameWindow,
статическое поле bConsoleMode типа boolean, а также методы
init, destroy, getAppletInfo и paint. Так как приложение AppletFrame
комбинированное, для обеспечения его работы в
консольном режиме мы предусмотрели статический
метод main.
Когда приложение запускается автономно, метод
main устанавливает флаг bConsoleMode в состояние true,
который используется как признак автономной
работы приложения, а затем создает объект app
класса CombiFrame:
public static void main(String args[])
{
CombiFrame app;
bConsoleMode = true;
app = new CombiFrame();
app.init();
}
Для созданного объекта (который, кстати,
является аплетом), вызывается метод init,
выполняющий все необходимые для создания окна
Frame инициализирующие действия.
Чтобы создание аплета выполнялось корректно,
мы вызываем в конструкторе класса CombiFrame
конструктор родительского класса Applet:
public CombiFrame()
{
super();
}
Метод init вызывается также и в том случае, когда
приложение работает в режиме аплета. В его задачу
входит создание окна как объекта класса FrameWindow,
определенного в нашем приложении:
public void init()
{
frame = new FrameWindow("Frame window");
frame.show();
}
Заголовок создаваемого окна передается
конструктору в качестве единственного
параметра.
Созданное окно отображается методом show.
Как только пользователь покидает страницу с
аплетом, метода destroy убирает окно FrameWindow:
public void destroy()
{
frame.hide();
}
Для сокрытия окна применяется метод hide.
Класс FrameWindow
В классе FrameWindow мы определили поле bConsoleMode типа
boolean, конструктор, методы handleEvent и paint.
Конструктор получает через свои параметры
заголовок окна (параметр szTitle) и режим работы bMode,
который равен true в консольном режиме:
public FrameWindow(String szTitle,
boolean bMode)
{
super(szTitle);
bConsoleMode = bMode;
resize(200, 90);
setBackground(Color.yellow);
setForeground(Color.black);
}
Режим работы сохраняется конструктором в поле
bConsoleMode. При обработке события Event.WINDOW_DESTROY мы
проверяем содержимое этого поля:
public boolean handleEvent(Event evt)
{
if(evt.id == Event.WINDOW_DESTROY)
{
setVisible(false);
if(bConsoleMode)
System.exit(0);
return true;
}
else
return super.handleEvent(evt);
}
Если приложение работает в консольном режиме,
то после сокрытия окна метод handleEvent завершает
работу виртуальной машины Java, вызывая для этого
метод System.exit. В режиме такая операция запрещена и
нашим приложением не выполняется.
Назад Вперед |