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

6. Приложение WindowsDemo

Задание. Создать апплет WindowsDemo, в окне которого расположены две кнопки с названиями «Show Frame Window» и «Hide Frame Window». Они предназначены для отображения и временного сокрытия окна класса FrameWnd (новый подкласс класса Frame), в котором выводится строка «This window - object of FrameWnd».В окне класса FrameWnd создается главное меню, содержащее меню «File» (пункты «New» и «Exit») и «Help» (пункты «Content» и «About»), а также в окно добавляется кнопка «Ok». При нажатии на кнопку «Ok» фрейма и при закрытии окна фрейма пользователем происходит его временное сокрытие, а при выборе пункта «Exit» меню фрейма завершается работа всего приложения. При выборе пунктов «New», «Content» и «About» меню окна класса FrameWnd появляется окно диалоговой панели класса DialogWnd (новый подкласс класса Dialog), в которой отображается название выбранного пункта и кнопка «Ok», нажатие на которую вызывает закрытие диалогового окна.

Методические указания. Апплет должен быть создан на основе шаблонов, содержащихся в Приложении 1 (или при помощи системы Java Applet Wizard).

Создание подкласса класса Frame.

Создадим новый подкласс FrameWnd класса Frame (в java-файле апплета), переопределив необходимые методы суперкласса:

class FrameWnd extends Frame // объявление нового класса фрейма

{ public FrameWnd(String sTitle) // sTitle - заголовок

{ super(sTitle); // для правильного создания окна фрейма

resize(320,240); // задание необходимых размеров окна

// здесь можно определить различные параметры фрейма,

// например, форму курсора, меню, добавить компоненты и др.

// ..................

}

public boolean handleEvent(Event evt)

{ switch (evt.id)

{ case Event.WINDOW_DESTROY:

hide(); // временное сокрытие окна фрейма

return true;

case Event.ACTION_EVENT:

// обработка событий от кнопки

if(evt.target instanceof Button)

{ // получаем ссылку на кнопку

Button btn=(Button)evt.target;

// проверка, от какой именно кнопки пришло

// событие и обработка события

// ......................................

return true;

}

// обработка событий от меню

if(evt.target instanceof MenuItem)

{ // получаем название/метку элемента меню

String label=(String)evt.arg;

// проверка, от какого именно пункта пришло

// событие и обработка события

// ......................................

return true;

}

break;

default: return super.handleEvent(evt);

}

return true;

}

public void paint(Graphics g)

{ // вывод в окно фрейма

// ....................................

super.paint(g); // вызов метода родительского класса

}

}

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

Создание подкласса класса Dialog.

Создадим новый подкласс DialogWnd класса Dialog (в java-файле апплета), переопределив необходимые методы суперкласса:

class DialogWnd extends Dialog // объявление нового класса диалога

{ // sMsg - сообщение, sTitle - заголовок окна,

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

public DialogWnd(String sMsg,Frame parent,String sTitle,boolean modal)

{ super(parent,sTitle,modal); // для правильного создания диалога

resize(100,100); // задание необходимых размеров окна диалога

// здесь можно создать все необходимые компоненты

// для размещения внутри диалоговой панели

// .......................................

}

public boolean handleEvent(Event evt)

{ switch (evt.id)

{ case Event.WINDOW_DESTROY:

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

return true;

case Event.ACTION_EVENT:

// обработка событий от кнопки

if(evt.target instanceof Button)

{ // получаем ссылку на кнопку

Button btn=(Button)evt.target;

// проверка, от какой именно кнопки пришло

// событие и обработка события

// ...........................

return true;

}

break;

default: return super.handleEvent(evt);

}

return true;

}

}

Этот класс служит для создания диалоговых окон, в которых будет выводиться сообщение. В дальнейшем в этот класс будут добавлены ряд элементов и в нем будут модифицированы некоторые методы.

Класс WindowsDemo. Объявление элементов класса.

В классе апплета объявим следующие элементы - ссылки на объекты классов:

FrameWnd frmWnd; // окно фрейма

Button btnShow; // кнопка для отображения фрейма

Button btnHide; // кнопка для сокрытия фрейма

Ссылки на экземпляры соответствующих классов будут присвоены этим переменным в методе init() апплета.

Класс WindowsDemo. Инициализация ( метод init()).

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

Сначала создадим кнопки btnShow и btnHide с надписями «Show Frame Window» и «Hide Frame Window» соответственно, а затем добавим их в апплет методом add().

Далее создадим объект нового класса FrameWnd - фрейм с заголовком «Frame from Applet» и ссылку на него присвоим переменной frmWnd.

Класс WindowsDemo. Завершение работы ( метод destroy()).

При завершении работы апплета удаляем созданное окно фрейма и освобождаем связанные с ним ресурсы:

frmWnd.dispose();

Класс WindowsDemo. Отрисовка содержимого окна ( метод paint()).

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

Класс WindowsDemo. Обработка событий ( метод action()).

Переопределим в класса апплета метод action(), вызываемый при некоторых действиях пользователя. В данном случае он будет обрабатывать события, поступающие от кнопок. Сначала создадим шаблон этого метода:

public boolean action(Event evt, Object obj)

{

// обработка событий от кнопок

if(evt.target instanceof Button) // объект является кнопкой?

{ // получаем ссылку на кнопку, вызвавшую событие

Button btn=(Button)evt.target;

// проверка, от какой именно кнопки пришло событие

// и обработка события от этой кнопки

// ...................................

return true; // если событие обработано, иначе return false

}

// необработанные события передаем на дальнейшую обработку

return false;

}

Проверяя, какой именно кнопке равен объект btn, необходимо выполнить следующие действия: при нажатии на кнопку btnShow отобразить фрейм frmWnd методом show(), а при нажатии на кнопку btnHide скрыть его методом hide(). Проверка равенства объекта btn другому объекту осуществляется следующим образом:

if(btn.equals(btnShow)) // от кнопки btnShow?

{ // обработка события от кнопки btnShow

// ....................................

}

Класс FrameWnd. Объявление элементов класса.

В классе фрейма объявим следующие элементы - ссылки на объекты классов:

Button btnOk; // кнопка сокрытия фрейма

MenuBar mainMenu; // полоса меню

Menu fileMenu; // меню "File"

Menu helpMenu; // меню "Help"

Ссылки на экземпляры соответствующих классов будут присвоены этим переменным в конструкторе фрейма.

Класс FrameWnd. Создание объекта (конструктор FrameWnd()).

Добавим в конструктор класса следующие действия. Сначала установим методом setBackground() цвет Color.yellow в качестве фона окна. Цвет переднего плана установим методом setForeground(), передавая ему константу Color.black.

Затем установим для окна фрейма режим размещения компонент FlowLayout при помощи метода setLayout(). Создадим кнопку btnOk с надписью «Ok» и введем ее во фрейм методом add().

Для того, чтобы сформировать меню фрейма, сначала создадим панель меню mainMenu - объект класса MenuBar, затем создадим выпадающие меню fileMenu (строка "File") и helpMenu (строка "Help") - объекты класса Menu, которые потом добавим в mainMenu его методом add(). Подготовленную панель меню mainMenu установим в качестве главного меню фрейма методом фрейма setMenuBar().

В выпадающие меню fileMenu и helpMenu добавим элементы "New", "Exit" и "Content", About" - объекты класса MenuItem.

Класс FrameWnd. Отрисовка содержимого окна ( метод paint()).

В этом методе просто выведем в окно фрейма строку «This window - object of FrameWnd» методом drawString() контекста отображения.

Класс FrameWnd. Обработка событий ( метод handleEvent()).

Добавим в метод handleEvent() обработку событий, поступающих от кнопки btnOk и от меню фрейма.

Если объект, вызвавший событие, является кнопкой (результат операции evt.target instanceof Button равен true) и эта кнопка является кнопкой btnOk (метод btn.equals(btnOk) возвращает true), то при помощи метода hide() временно скроем окно фрейма.

Если объект, вызвавший событие, является элементом меню (результат операции evt.target instanceof MenuItem равен true), то:

  • если выбран элемент меню "Exit" (объект label равен строке "Exit"), то методом System.exit(0) прекратим работу всего апплета Проверка равенства объекта label другому объекту осуществляется следующим образом:

if(label.equals("Exit")) // от элемента "Exit"?

{ // обработка события

// .....................

}

  • если же выбраны элементы "New", "Content" или About", то в каждом случае создадим модальную диалоговую панель класса DialogWnd, родителем которой является текущий экземпляр фрейма, в которой выводится название выбранного элемента меню, и отобразим ее, например:

DialogWnd dlgWnd=new DialogWnd("Item New selected",

this,"Dialog from Frame",true);

dlgWnd.show();

Класс DialogWnd. Объявление элементов класса.

В классе диалога объявим следующие элементы - ссылки на объекты классов:

Label lbMsg; // поле для отображения текста сообщения

Button btnOk; // кнопка удаления панели

Ссылки на экземпляры соответствующих классов будут присвоены этим переменным в конструкторе фрейма.

Класс DialogWnd. Создание объекта (конструктор DialogWnd()).

Добавим в конструктор класса следующие действия. Сначала установим для окна диалога режим размещения компонент GridLayout (сетка 2x1) при помощи метода setLayout(). Затем создадим метку lbMsg, передавая конструктору класса Label строку sMsg и режим выравнивания по центру. Созданную метку введем в панель диалога методом add(). Создадим кнопку btnOk с надписью «Ok» и введем ее в диалог методом add().

Класс DialogWnd. Обработка событий ( метод handleEvent()).

Добавим в метод handleEvent() обработку событий, поступающих от кнопки btnOk. Если объект, вызвавший событие, является кнопкой (результат операции evt.target instanceof Button равен true) и эта кнопка является кнопкой btnOk (метод btn.equals(btnOk) возвращает true), то при помощи метода dispose() удалим окно диалога.

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