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

5. Приложение PanelsDemo2

Задание. Создать апплет двойного назначения PanelsDemo2, в окне которого создаются три панели, расположенные горизонтально (для окна апплета используется менеджер размещения GridLayout) и имеющие рамку по периметру,. В верхней панели рисуется строка текста «Example of Font, Background and Foreground Colors». Средняя панель используется как «блокнот», предназначенный для выбора цвета фона, цвета изображения и шрифта для верхней панели(всего 3 «страницы», панель использует менеджер размещения CardLayout). Нижняя панель содержит управляющие кнопки «Background Color», «Foreground Color» и «Set Text Font», а также «Previous» и «Next», позволяющие перебирать страницы «блокнота».

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

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

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

// верхняя, средняя и нижняя панели

Panel drawPanel; // панель для рисования

Panel cardPanel; // панель для "блокнота"

Panel controlPanel; // панель для кнопок управления

// панели страниц "блокнота"

Panel backgrPanel,foregrPanel,fontPanel;

// меню выбора для панелей страниц "блокнота"

Choice chBackgr,chForegr,chFont;

// кнопки панели управления

Button btnPrev,btnNext,btnBackgr,btnForegr,btnFont;

// строка для хранения названия выбранного шрифта

String fontName;

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

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

В этом методе необходимо создать панели и добавить в них компоненты. Сначала установим желтый (Color.yellow) цвет фона окна апплета методом setBacground(). Затем выберем для окна апплета схему размещения GridLayout (сетка 3х1), используя метод setLayout() апплета.

Создание панелей апплета.

Создадим объекты drawPanel, cardPanel и controlPanel класса Panel. Затем установим для панелей менеджеры размещения (вызывая метод setLayout() для объектов cardPanel и controlPanel): для панели cardPanel - менеджер размещения CardLayout, а для панели controlPanel - менеджер FlowLayout.

Создание панелей выбора и ввод их на страницы «блокнота».

Создадим объекты панелей выбора backgrPanel, foregrPanel и fontPanel класса Panel. Затем введем в них соответствующие элементы управления:

backgrPanel.add(new Label("Choose Background Color:"));

backgrPanel.add(chBackgr=new Choice());

foregrPanel.add(new Label("Choose Foreground Color:"));

foregrPanel.add(chForegr=new Choice());

fontPanel.add(new Label("Choose Font:"));

fontPanel.add(chFont=new Choice());

После этого добавим созданные панели backgrPanel, foregrPanel и fontPanel поочередно в «блокнот» cardPanel, используя метод add(), которому требуется передавать название панели и ссылку на нее, например:

cardPanel.add("Background",backgrPanel);

Используется именно этот метод введения панелей в «блокнот», потому что иначе метод show() класса CardLayout не сможет отобразить произвольно выбранную панель «блокнота».

Создание кнопок и ввод их в панель управления.

Создадим кнопки btnBackgr, btnForegr, btnFont, btnPrev и btnNext с надписями «Background Color», «Foreground Color», «Set Text Font», «Previous» и «Next». После создания кнопок добавим их по очереди в панель controlPanel.

Ввод панелей в апплет.

После завершения формирования панелей drawPanel, cardPanel и controlPanel добавим их по очереди в апплет при помощи метода add() аплета.

Заполнение меню выбора.

Заполним методом addItem() класса Choice все меню выбора из «блокнота»:

  • В меню chBackgr добавим строки "Yellow", "Green", "White".

  • В меню chForegr добавим строки "Black", "Red", "Blue".

  • В меню chFont добавим строки "Helvetica", "Courier", "TimesRoman".

Выберем шрифт по умолчанию и запомним его имя. Для этого создадим объект класса String, передавая конструктору String() строку "Helvetica", ссылку на этот объект присвоим переменной fontName.

И последнее - отобразим окно апплета вызовом метода show().

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

Изменим метод paint() так, чтобы в нем происходил вывод строки «Example of Font, Background and Foreground Colors» в панель drawPanel. Для вывода текста используется выбранный (текущий) шрифт. Кроме того, в этом методе рисуются рамки всех панелей.

Сначала получим контексты отображения gDraw, gCard, gControl панелей drawPanel, cardPanel и controlPanel. Например, для получения контекста панели drawPanel используется следующий код:

Graphics gDraw=drawPanel.getGraphics(); // контекст для drawPanel

Затем нарисуем рамки вокруг всех панелей апплета, используя их контексты отображения. Например, рамка вокруг панели drawPanel рисуется следующим образом:

gDraw.drawRect(0, 0, drawPanel.size().width()-1, drawPanel.size().height()-1);

Для панели drawPanel установим текущий выбранный шрифт и выведем строку текста:

gDraw.setFont(new Font(fontName,Font.PLAIN,12));

gDraw.drawString("Example of Font, Background and Foreground Colors",10,50);

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

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

public boolean action(Event evt, Object obj)

{

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

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

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

Button btn=(Button)evt.target;

// получаем метку кнопки

String lbl=btn.getLabel();

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

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

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

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

}

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

if(evt.target instanceof Choice) // объект является меню выбора?

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

Choice ch=(Choice)evt.target;

// получаем номер выбранного пункта

int index=ch.getSelectedIndex();

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

// и обработка события от этого меню

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

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

}

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

return false;

}

События от панели controlPanel.

Проверяя, какой именно кнопке равен объект btn, необходимо выполнить следующие действия: при нажатии на кнопки btnPrev, btnNext, btnBackgr, btnForegr, btnFont отобразить соответствующую страницу «блокнота». Проверка равенства объекта btn другому объекту осуществляется следующим образом:

if(btn.equals(btnPrev)) // от кнопки "Previous"?

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

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

}

Если нажата кнопка btnPrev, то сначала с помощью метода getLayout() получаем ссылку на используемый для панели cardPanel менеджер компоновки, а затем вызываем метод previous() для отображения предыдущей страницы панели cardPanel:

CardLayout cl=(CardLayout)cardPanel.getLayout();

cl.previous(cardPanel);

Аналогичные действия сделаем, если нажата кнопка btnNext, но для отображения следующей страницы вызовем метод next() класса CardLayout.

При нажатии на кнопки btnBackgr, btnForegr, btnFont для отображения соответствующей страницы «блокнота» используется метод show() класса CardLayout. Например, если нажата кнопка btnBackgr:

CardLayout cl=(CardLayout)cardPanel.getLayout();

cl.show(cardPanel,"Background");

События от панели cardPanel.

Проверяя, какому именно меню равен объект ch, необходимо выполнить следующие действия: изменить цвет фона или цвет переднего плана панели drawPanel или изменить шрифт для текста. Проверка равенства объекта ch другому объекту осуществляется следующим образом:

if(ch.equals(chBackgr)) // от меню выбора цвета фона?

{ // обработка события от меню выбора цвета фона

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

}

Если событие выбора пункта пришло от меню chBackgr, то, в зависимости от номера выбранного пункта, установим новый цвет фона панели drawPanel при помощи метода setBackground(), перерисуем панель и окно апплета:

if(index==0) drawPanel.setBackground(Color.yellow);

else if(index==1) drawPanel.setBackground(Color.green);

else if(index==2) drawPanel.setBackground(Color.white);

drawPanel.repaint(); repaint();

Если событие выбора пункта пришло от меню chForegr, то, в зависимости от номера выбранного пункта, установим новый цвет переднего плана панели drawPanel при помощи метода setForeground(), перерисуем панель и окно апплета.

И, наконец, если событие выбора пункта пришло от меню chFont, то, в зависимости от номера выбранного пункта, запишем в строку fontName имя выбранного шрифта, перерисуем панель и окно апплета.

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