Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Консольное приложение

Простейший аплет
Аплет с параметрами
Комбинированное приложение
Консольное с окном Frame
Аплет с окном Frame
Комбинированное с окном Frame

Библиотека классов
Аплет с обработкой событий
Консольное с обработкой событий

Назад Вперед

2.7. Комбинированное приложение с окном Frame

В примере демонстрируется способ создания окна Frame в комбинированном приложении Java, способном работать как автономно, так и под управлением браузера в виде аплета.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Демонстрация
(ваш браузер должен уметь работать с аплетами Java)

Немного теории

Для того чтобы создать комбинированное приложение с унифицированным интерфейсом, не зависящим от текущего режима работы (консольное или аплет), удобно использовать окна класса Frame.

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

Описание примера

Комбинированное приложение создает окно класса Frame, показанное на рис. 1 для режима аплета.

pic1.gif (2199 bytes)

Рис. 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. В режиме такая операция запрещена и нашим приложением не выполняется.

Назад Вперед

[Назад]