Реферат: Программирование графики и обработка событий

/>/>/>Факультет «Информатика и системы управления»

Методические указания к лабораторной работе

по курсу«Распределенные системы обработки информации»

Программированиеграфики и обработка событий

Москва 2004г.


Оглавление

Цель работы… 3

Задание для домашней подготовки. 3

Задания к лабораторной работе. 3

Задание 1. 3

Задание 2. 3

Содержание отчета. 3

Контрольные вопросы. 4

Литература. 5

Приложение 1. Спецификация класса Calc. 6

Приложение 2. Иерархия классов AWT. 9

Приложение 3. Основные компоненты. 10

Компонент Label 10

Компонент Button. 10

Компонент Checkbox. 11

Класс CheckboxGroup. 11

Компонент Choice. 12

Компонент TextField. 13

Контейнер Framе. 14

Приложение 4. Менеджеры размещения. 16

Менеджер абсолютного размещения. 16

Менеджер FlowLayout 18

Менеджер BorderLayout 18

Менеджер GridLayout 19

Менеджер CardLayout 20

Менеджер GridBagLayout 21

Приложение 5. Обработка событий. 25


/>/>/>Цельработы

1.        Познакомиться сбиблиотекой java.awt.

2.        Научитсяобрабатывать события.

3.        Освоить работу суправляющими компонентами и менеджерами размещения.

4.        Применитьполученные знания на практике

/>/>/>/>Заданиедля домашней подготовки

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

/>/>Заданияк лабораторной работеЗадание 1

Написать программуобработки щелчков на любую из трех кнопок, расположенных на панели. Каждый раз,когда пользователь щелкает мышью на какой-нибудь из трех кнопок, долженизменяться цвет панели (желтый, синий, красный).

Задание 2

o   Написатьпрограмму–калькулятор, реализующую графический интерфейс.

/>/>/>Содержание отчета

Отчет должен содержать:

1.        Постановкузадачи, решаемой отлаженной программой.

2.        Руководствопользователя отлаженной программы, содержащее описание интерфейсов всех функцийпрограммы.

3.        Листинг программыс необходимыми комментариями.

/>/>/> Контрольныевопросы

1.        Почему впрограмме необходимо записать обработчик события закрытия окна? Как закрытьокно в случае, если программа запущена без этого обработчика?

2.        Какие менеджерыразмещения компонентов вы знаете? В чем особенность каждого из них?

3.        Изменитепрограмму так, чтобы метод getRez()вызывался при:

a)         вводе текста в одно изтекстовых полей

b)        изменении состоянияфлажка (переключателей)

c)         выборе одного из пунктоввыпадающего списка

4.        Как изменитсяработа программы, если внутри блока switch(){} не записывать операторы break.

5.        Назовите дваспособа, которыми можно задать заголовок (title) окна.


/>/>Литература

Официальные источники:

1.        КенАрнольд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java™.

2.        Официальныйсайт Java — java.sun.com/ (есть раздел на русском языке с учебником).

3.        Java™ 2 SDK, Standard Edition Documentation — java.sun.com/products/jdk/1.5/index.html.

4.        ДжеймсГослинг, Билл Джой, Гай Стил. Спецификация языка Java (The Java Language Specification — www.javasoft.com/docs/books/jls/). Перевод на русский язык —http://www.uni-vologda.ac.ru/java/jls/index.html

5.        Официальныйсайт проекта Eclipse — www.eclipse.org/.

Другое:

1.        ДмитрийРамодин. Начинаем программировать на языке Java.

2.        НиколайСмирнов. Java 2: Учебное пособие.

3.        КартузовА. В. Программирование на языке Java.

4.        ВязовикН.А. Программирование на Java.

5.        АлексейЛитвинюк. Введение в интегрированную среду разработки Eclipse — lib.juga.ru/article/articleview/174/1/69/.


/>Приложение1. Спецификация класса Calc.

import java.awt.*;         //подключениепакета с классами графических компонентов

import java.awt.event.*;         // подключение пакета синтерфейсами – “слушателями”

class Calcextends Frame implements ActionListener

//наследуем класс Frame (окно) и интерфейс “слушателя”события нажатия кнопки

{

TextField t1=new TextField(8);       //размер поля – 8 символов

//… другие текстовые поля

Label l1=new Label("(double)"); //метка по умолчанию содержит текст «(double)»

//… другие метки

Button b = newButton(«Получить результат»);        //кнопка

Checkbox cb=new Checkbox("+20%");//флажок с названием

Choice ch;//выпадающий список

public Calc(){//конструктор класса

super();

setSize(400,200);//размер окна

ch = new Choice();//конструктор выпадающего списка

ch.addItem("+");//добавляем пункты списка

//… другие пункты списка

setLayout(new FlowLayout()); //назначаем менеджер размещениякомпонентов (компоновщик)

add(l1);//выводим созданные компоненты на экран

add(t1);

add(ch);

//… и другие

addWindowListener(new WindowAdapter(){ //добавляем обработчик кнопкизакрытия окна

public voidwindowClosing(WindowEvent e){

dispose();System.exit(0);

}

}

);

b.addActionListener(this);//добавляем обработчик нажатия на кнопку

show();//делает окно видимым

}//конец конструктора

public void getRez(){//метод, вычисляющий результат

double x, //значение из первого текстового поля

Rez=0; //результат

//… вторая переменная –значение второго текстового поля

try{

x=new Double(t1.getText()).doubleValue();//извлечение числа из первоготекстового поля

//…

switch(ch.getSelectedIndex()){//какойпункт выпадающего списка выбран? (номер)

case 0: Rez = x +/*вторая переменная*/; break;

case 1: //…

//… остальные операторы

};

if (cb.getState()) Rez*=1.2;//если флажок нажат, умножаемрезультат на 1.2

//записываем текст в поле(метку) результата с помощью метода setText(String.valueOf(Rez));

} //окончание блока try

catch(Exceptionex){

String s=newString(ex.getMessage());

//записываем текст в поле(метку) сообщения об ощибке с помощью метода setText(«Ошибка „+s);

}// окончание блока catch

}// окончание метода getRez()

public voidactionPerformed(ActionEvent e){getRez();}//реализация метода actionPerformed

//(метод вызываетсянажатием на кнопку b), см. выше

public static void main(String[]a){Calc clc=new Calc();} //создаемтолько экземпляр класса Calc ивсе.

} //окончание класса Calc


/>/>Приложение2. Иерархия классов AWT

/>

На рис. 1показана иерархия основных классов AWT. Основу ее составляют готовыекомпоненты: Button, Canvas, Checkbox, Choice, Container, Label, List,Scrollbar, TextArea, TextField, Menubar, Menu, PopupMenu, Menultem,CheckboxMenuItem. Если этого набора не хватает, то от класса Canvas можнопородить собственные “тяжелые» компоненты, а от класса Component —«легкие» компоненты.

Основные контейнеры — это классы Panel, ScrollPane, Window, Frame, Dialog, FileDialog. Свои «тяжелые» контейнерыможно породить от класса Panel, а «легкие» — от класса Сontainer.

На рис. 1также показаны и начальные классы иерархии библиотеки Swing — классыJComponent, JWindow, JFrame, JDialog, JApplet.

/>

Рис. 1 Иерархия основных классов AWT


Приложение 3. Основные компоненты/>/> Компонент Label

КомпонентLabel — это просто строка текста, оформленная как графический компонент дляразмещения в контейнере. Текст можно поменять только методом доступаsetText(string text), но не вводом пользователя с клавиатуры или с помощьюмыши.

Создаетсяобъект этого класса одним из трех конструкторов:

·          Label () — пустой объект без текста;

·          Label (stringtext) — объект с текстомtext, который прижимается клевому краю компонента;

·          Label (Stringtext, int alignment) —объект с текстом text и определенным размещением в компоненте текста,задаваемого одной из трех констант: CENTER, LEFT, RIGHT.

Размещениеможно изменить методом доступа setAlignment(int alignment).

Остальныеметоды позволяют получить текст getText() и размещение getAlignment ().

/>События

В классеLabel происходят события классов Component: ComponentEvent, FocusEvent,KeyEvent, MouseEvent.

/>/>КомпонентButton

КомпонентButton — это кнопка стандартного для данной графической системы вида снадписью, умеющая реагировать на щелчок кнопки мыши — при нажатии она«вдавливается» в плоскость контейнера, при отпускании — становится«выпуклой».

Дваконструктора Button () и Button (Stringlabel) создают кнопку без надписи и с надписью label соответственно.

Методыдоступа getLabel() и setLabel (String label) позволяют получить и изменитьнадпись на кнопке.

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

/>События

Кроме событийкласса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, привоздействии на кнопку происходит событие ActionEvent.

/>/>КомпонентCheckbox

Компонент Checkbox — это надпись справа отнебольшого квадратика, в котором в некоторых графических системах появляетсягалочка после щелчка кнопкой мыши — компонент переходит в состояние on. Послеследующего щелчка галочка пропадает — это состояние off. В других графическихсистемах состояние on отмечается «вдавливанием» квадратика. Вкомпоненте Checkbox состояния on/off отмечаютсялогическими значениями true/false соответственно.

Триконструктора Checkbox (), Checkbox (String label), Checkbox (String label, boolean state) создают компонент без надписи, снадписью label в состоянии off, и в заданном состоянии state.

Методыдоступа getLabel(), setLabel (String label), getState(), setState (boolean state) возвращают иизменяют эти параметры компонента.

/>События

В классеCheckbox происходят события класса Component: ComponentEvent, FocusEvent,KeyEvent, MouseEvent, а при изменении состояния кнопки возникает событиеItemEvent.

В библиотекеAWT радиокнопки не образуют отдельный компонент. Вместо этого несколькокомпонентов Checkbox объединяются в группу спомощью объекта класса CheckboxGroup.

/>/>КлассCheckboxGroup

КлассCheckboxGroup очень мал, поскольку его задача — просто дать общее имя всемобъектам Checkbox, образующим одну группу. Внего входит один конструктор по умолчанию CheckboxGroup() и два метода доступа:

·          getSelectedCheckbox(), возвращающий выбранный объектCheckbox;

·          setSelectedCheckbox(Checkbox box), задающийвыбор.

/>Как создать группу радиокнопок

Чтобыорганизовать группу радиокнопок, надо сначала сформировать объект классаCheckboxGroup, а затем создавать кнопки конструкторами

Checkbox(Stringlabel, CheckboxGroup group, boolean state)

Checkbox(Stringlabel, boolean state, CheckboxGroup group)

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

Только однарадиокнопка в группе может иметь состояние state = true.

/>/>КомпонентChoice

КомпонентСhoice — это раскрывающийся список, один, выбранный, пункт (item) котороговиден в поле, а другие появляются при щелчке кнопкой мыши на небольшой кнопкесправа от поля компонента.

Вначалеконструктором Choice() создается пустой список.

Затем,методом add (String text), в список добавляютсяновые пункты с текстом text. Они располагаются в порядке написания методовadd() и нумеруются от нуля.

Вставитьновый пункт в нужное место можно методом

insert(string text,intposition).

Выбор пунктаможно произвести из программы методом select (String text) или select(intposition).

Удалить одинпункт из списка можно методом remove (String text) или remove (int position), авсе пункты сразу — методом removeAll().

Число пунктовв списке можно узнать методом getItemCount().

Выяснить,какой пункт находится в позиции pos можно методом getItem(int pos), возвращающим строку.

Наконец,определение выбранного пункта производится методом getSelectedIndex(),возвращающим позицию этого пункта, или методом getSelectedItem(), возвращающим выделеннуюстроку.

/>События

В классеChoice происходят события класса Component: ComponentEvent, FocusEvent,KeyEvent, MouseEvent, а при выборе пункта возникает событие ItemEvent.

Если надопоказать на экране несколько пунктов списка, то в этом случае используетсяобъект класса List.

/>/>КомпонентTextField

КомпонентTextField — это поле для ввода одной строки текста. Ширина поля измеряется вколонках (column). Ширина колонки — это средняя ширина символа в шрифте,которым вводится текст. Нажатие клавиши <Enter> заканчивает ввод и служитсигналом к началу обработки введенного текста, т. е. при этом происходитсобытие ActionEvent.

В классечетыре конструктора:

·          TextField() — создает пустое поле шириной в однуколонку;

·          TextField(intcolumns) — создает пустоеполе с числом колонок columns;

·          TextField(String text) — создает поле с текстом text;

·          TextField(Stringtext, int columns) —создает поле с текстом text и числом колонок columns.

Интереснаяразновидность поля ввода — поле для ввода пароля. В таком поле вместо вводимыхсимволов появляется какой-нибудь особый эхо-символ, чаще всего звездочка, чтобыпароль никто не подсмотрел через плечо.

Данное полеввода получается выполнением метода setEchoChar(char echo).Аргумент echo — это символ, который будет появляться в поле. Проверить,установлен ли эхо-символ, можно логическим методом echoCharisSet(), получить эхо-символ — методомgetEchoChar ().

Чтобы вернутьполе ввода в обычное состояние, достаточно выполнить метод setEchoChar(0).

/>События

Кроме событийкласса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, приизменении текста пользователем происходит событие TextEvent, а при нажатии наклавишу <Enter> — событие ActionEvent.

/>/>/>Контейнер Framе

Контейнер Frame— это полноценное готовое окно со строкой заголовка, в которую помещены кнопкиконтекстного меню, сворачивания окна в ярлык и разворачивания во весь экран икнопка закрытия приложения. Заголовок окна записывается в конструкторе илиметодом setTitle(String title).

На кнопкеконтекстного меню в левой части строки заголовка изображена дымящаяся чашечкакофе — логотип Java. Вы можете установить там другое изображение методом setIconImage(image icon), создав предварительно изображение icon ввиде объекта класса image.

Все элементыокна Frame вычерчиваются графической оболочкой операционной системы по правиламэтой оболочки. Окно Frame автоматически регистрируется в оконном менеджереграфической оболочки и может перемещаться, менять размеры, сворачиваться впанель задач (task bar) с помощью мыши или клавиатуры, как «родное»окно операционной системы.

Создать окнотипа Frame можно следующими конструкторами:

·          Frame () — создает окно с пустой строкойзаголовка;

·          Frame (String title) — записывает аргумент title в строкузаголовка.

Методы классаFrame осуществляют доступ к элементам окна, но также класс Frame наследуетоколо двухсот методов классов Component, Container и Window. В частности, наследуется менеджер размещения поумолчанию — BorderLayout.

/>События

Кроме событийкласса Component:ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении размеров окна, его перемещении илиудалении с экрана, а также показа на экране происходит событие windowEvent.


Приложение 4. Менеджеры размещения.

/>

Для тогочтобы размещение компонентов в окне не нарушалось при движении, переносе и т.д.используются менеджеры размещения или компоновки (layout managers), называемыеиногда просто компоновщиками.

Программистможет воспользоваться стандартными менеджерами размещения или написать своисобственные, реализовав интерфейсы LayoutManager или LayoutManager2. Кстандартным менеджерам размещения относятся:

Класс Описание null абсолютное позиционирование при размещении компонентов в контейнере FlowLayout компоненты размещаются в контейнере один за другим: слева направо, сверху вниз BorderLayout компоненты размещаются в контейнере в порядке сторон света – “Север”, “Восток”, “Юг”, “Запад”, “Центр” GridLayout компоненты размещаются в контейнере в клетках таблицы; каждый элемент занимает одну клетку GridBagLayout компоненты размещаются в контейнере в клетках таблицы; каждый элемент может занимать более одной клетки; является наиболее гибким компоновщиком CardLayout одновременно доступен один компонент контейнера; идеальный менеджер компоновки для создания составных компонентов, похожих на “записные” книжки в Windows

Менеджерыразмещения могут быть скомбинированы друг с другом.

По умолчаниюв панелях и аплетах используется менеджер размещения FlowLayout, а в окнах идиалоговых окнах – BorderLayout.

Установкаменеджера размещения для текущего контейнера осуществляется при помощи вызова:

контейнер.setLayout(new конструкторМенеджераРазмещения(параметры))

Менеджерабсолютного размещения

Объявление того, чтоконтейнер имеет менеджер размещения с абсолютным позиционированием компонентов,имеет вид:

контейнер.setLayout(null)

Установка границ каждогокомпонента осуществляется при помощи метода:

компонент.setSize(координатаХ,координатаY, ширина, высота)

Компонент добавляется вконтейнер при помощи метода:

контейнер.add(компонент)

Приведемпример использования менеджера размещения компонентов с абсолютнымпозиционированием.

Пример.1. Демонстрацияиспользования менеджера размещения компонентов с абсолютным позиционированием

 

importjava.awt.*;

publicclass Absolute extends Frame{

Button b1 = new Button(«Cancel»),// Создадим две кнопки

b2 = newButton(«OK» );

public voidAbsolute()

{

setBackground(Color.lightGray);// Установим светло-серый фон

setLayout(null);// Установим для окна менеджер абсолютногорасположения

// Установим границы(расположение и размеры) для каждой кнопки

b1.setBounds( 50, 70, 50, 24);

b2.setBounds(110, 70, 50, 24);

// Добавим обе кнопки вокно

add(b1);

add(b2);

}

}

МенеджерFlowLayout

Наиболеепросто поступает менеджер размещения FlowLayout. Он укладывает в контейнер одинкомпонент за другим слева направо как кирпичи, переходя от верхних рядов книжним. При изменении размера контейнера «кирпичи» перестраиваются.Компоненты поступают в том порядке, в каком они заданы в методах add().

В каждом рядукомпоненты могут прижиматься к левому краю, если в конструкторе аргумент alignравен FlowLayout.LEFT, к правому краю, если этот аргумент FlowLayout.RIGHT, или собираться в середине ряда,если FlowLayout.CENTER.

Междукомпонентами можно оставить промежутки (gap) по горизонтали hgap и вертикалиvgap. Это задается в конструкторе:

FlowLayout(intalign, int hgap, int vgap)

Второй конструкторзадает промежутки размером 5 пикселов:

FlowLayout(intalign)

Третийконструктор определяет выравнивание по центру и промежутки 5 пикселов:

FlowLayout()

Послеформирования объекта эти параметры можно изменить методами:

setHgap(inthgap) setVgap(int vgap) setAlignment(int align)

МенеджерBorderLayout

Менеджерразмещения BorderLayout делит контейнер на пять неравных областей, полностьюзаполняя каждую область одним компонентом. Области получили географическиеназвания NORTH, SOUTH,WEST, EAST и CENTER.

Метод add() в случае применения BorderLayout имеет два аргумента: ссылку на компонент comp и область region, в которую помещается компонент — одну изперечисленных выше констант:

add(Componentcomp, String region)

Обычный методadd (Component comp) с одним аргументом помещаеткомпонент в область CENTER.

В классе дваконструктора:

·   BorderLayout () — между областями нетпромежутков;

·   BorderLayout(int hgap int vgap) —между областями остаются горизонтальные hgap ивертикальные vgap промежутки, задаваемые в пикселах.

Если вконтейнер помещается менее пяти компонентов, то некоторые области неиспользуются и не занимают места в контейнере. Если не занята область CENTER, то компоненты прижимаются к границам контейнера.

/>

Рис. 2. Области размещения BorderLayout

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

/>/>МенеджерGridLayout

Менеджерразмещения GridLayout расставляет компоненты в таблицу с заданным вконструкторе числом строк rows и столбцов columns:

GridLayout(introws, int columns)

Всекомпоненты получают одинаковый размер. Промежутков между компонентами нет.Второй конструктор позволяет задать промежутки между компонентами в пикселах погоризонтали hgap и вертикали vgap:

GridLayout(introws, int columns, int hgap, int vgap)

Конструкторпо умолчанию GridLayout() задает таблицу размером 0x0 безпромежутков между компонентами. Компоненты будут располагаться в одной строке.

Компонентыразмещаются менеджером GridLayout слева направо по строкам созданной таблицы втом порядке, в котором они заданы в методах add().

Нулевоеколичество строк или столбцов означает, что менеджер сам создаст нужное ихчисло.

/>

Рис. 3. Пример размещения кнопок менеджеромGridLayout

/>/> Менеджер CardLayout

Менеджерразмещения CardLayout своеобразен — он показываетв контейнере только один, первый (first), компонент. Остальные компоненты лежатпод первым в определенном порядке как игральные карты в колоде. Их расположениеопределяется порядком, в котором написаны методы add(). Следующий компонент можно показать методом next(Container с), предыдущий — методом previous(Container с), Последний — методом last(Container с), первый — методом first(Container с). Аргумент этих методов — ссылка наконтейнер, в который помещены компоненты, обычно this.

В классе дваконструктора:

·        СardLayout() — не отделяет компонент от границконтейнера;

·        CardLayout(inthgap, int vgap) — задаетгоризонтальные hgap и вертикальные vgap поля.

МенеджерCardLayout позволяет организовать и произвольный доступ к компонентам. Метод add() для менеджера CardLayout имеет своеобразный вид:

add(Componentcomp, Object constraints)

Здесьаргумент constraints должен иметь тип String и содержать имя компонента. Нужный компонент с именемname можно показать методом:

show(Containerparent, String name)

/>

Рис. 4. Пример менеджера размещения CardLayout

/>/> Менеджер GridBagLayout

Менеджерразмещения GridBagLayout расставляет компоненты наиболее гибко, позволяязадавать размеры и положение каждого компонента. Но он оказался очень сложным иприменяется редко.

В классеGridBagLayout есть только один конструктор по умолчанию, без аргументов.Менеджер класса GridBagLayout, в отличие от других менеджеров размещения, несодержит правил размещения. Он играет только организующую роль. Ему передаютсяссылка на компонент и правила расположения этого компонента, а сам он помещаетданный компонент по указанным правилам в контейнер. Все правила размещениякомпонентов задаются в объекте другого класса, GridBagConstraints.

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

КлассGridBagConstraints содержит одиннадцать полей, определяющих размерыкомпонентов, их положение в контейнере и взаимное положение, и несколькоконстант — значений некоторых полей. Они перечислены в табл. 1. Эти параметрыопределяются конструктором, имеющим одиннадцать аргументов. Второй конструктор— конструктор по умолчанию — присваивает параметрам значения, заданные поумолчанию.

Таблица 1. Поля класса GridBagConstraints

Поле Значение anchor

Направление размещения компонента в контейнере. Константы:

CENTER, NORTH, EAST, NORTHEAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, и NORTHWEST; no умолчанию CENTER

fill Растяжение компонента для заполнения ячейки. Константы: NONE, HORIZONTAL, VERTICAL, BOTH; ПО умолчанию NONE gridheight Количество ячеек в колонке, занимаемых компонентом. Целое типа int, по умолчанию 1. Константа REMAINDER означает, что компонент займет остаток колонки, RELATIVE — будет следующим по порядку в колонке gridwidth Количество ячеек в строке, занимаемых компонентом. Целое типа int, по умолчанию 1. Константа REMAINDER означает, что компонент займет остаток строки, RELATIVE — будет следующим в строке по порядку gridx Номер ячейки в строке. Самая левая ячейка имеет номер 0. По умолчанию константа RELATIVE, что означает: следующая по порядку gridy Номер ячейки в столбце. Самая верхняя ячейка имеет номер 0. По умолчанию константа RELATIVE, что означает: следующая по порядку insets Поля в контейнере. Объект класса insets; по умолчанию объект с нулями ipadx, ipady Горизонтальные и вертикальные поля вокруг компонентов; по умолчанию 0

weightx,

weighty

Пропорциональное растяжение компонентов при изменении размера контейнера; по умолчанию 0,0

Как правило,объект класса GridBagConstraints создается конструктором по умолчанию, затемзначения нужных полей меняются простым присваиванием новых значений, например:

GridBagConstraintsgbc = new GridBagConstraints();

gbc.weightx= 1.0;

gbc.gridwidth= GridBagConstraints.REMAINDER;

gbc.gridheight=2;

Послесоздания объекта gbc класса GridBagConstraints менеджеру размещения указывается,что при помещении компонента comp вконтейнер следует применять правила, занесенные в объект gbc. Для этого применяется метод

add(Componentcomp, GridBagConstraints gbc)

Итак, схемаприменения менеджера GridBagLayoutтакова:

GridBagLayoutgbl = new GridBagLayout(); // Создаем менеджер

setLayout(gbl);// Устанавливаем его в контейнер

// Задаемправила размещения по умолчанию

GridBagConstraintsс = new GridBagConstraints();

Buttonb2 = new Button(); // Создаем компонент

c.gridwidth=2;  // Меняем правила размещения

add(bl, с); //Помещаем компонент b2 в контейнер поуказанным правилам

//размещенияс

Button b2 = new Button(); // Создаемследующий компонент

c.gridwidth =1; // Меняем правила для его размещения

add(b2, с); //Помещаем в контейнер

и т.д.


Приложение 5. Обработка событий.

Java 2 используетхорошо структурированную, функционально полную и очень логичную модельобработки событий, впервые реализованную в JDK 1.1. Иерархия классов событийимеет вид:

 Object

 EventObject

 AWTEvent

 ActionEvent

 AdjustmentEvent

 ItemEvent

 TextEvent

 ComponentEvent

 ContainerEvent

 FocusEvent

 WindowEvent

 PaintEvent

 InputEvent

 KeyEvent

 MouseEvent

Классы и интерфейсы дляработы с делегированными событиями расположены в пакете java.awt.event (см.рисунок 5).


/>

В классах событийсуществуют открытые методы:

Класс Метод Возвращаемые данные EventObject Object getSource() объект, вызвавший события

/>

String toString() строка, описывающая событие AWTEvent int getID() идентификатор типа события

/>

String paramString() строка параметров события ActionEvent int getModifiers() состояние клавиш-модификаторов

/>

String getActionCommand() название действия AdjustmеntEvent int getValue() текущее значение, полученное из прокрутки

/>

int getAdjustmentType() тип установки прокрутки, изменившей значения

/>

Adjustable getAdjustable() ссылка на объект прокрутки, установивший значение ItemEvent Object getItem() пункт списка, измененный данным событием

/>

Container getContainer() объект, вызвавший данное событие FocusEvent boolean isTemporary() истину, если фокус ввода данного объекта возобновляется самостоятельно PaintEvent Graphics getGraphics() графический контекст для данного события WindowEvent Window getWindow() ссылка на окно, которое вызвало данное событие InputEvent boolean isShiftDown() истина, если нажата клавиша Shift

/>

boolean isControlDown() истина, если нажата клавиша Control

/>

boolean isMetaDown() истина, если нажата клавиша Meta

/>

boolean isAltDown() истина, если нажата клавиша Alt

/>

int getWhen() время в миллисекундах с того времени, как произошло данное событие

/>

int getModifiers() состояние всех модификаторов клавиатуры

/>

boolean isConsumed() истина, если событие обработано KeyEvent int getKeyCode() код клавиши, вызвавшей событие

/>

char getKeyChar() символ клавиши, вызвавшей событие

/>

boolean isActionKey() истина, если клавиша, вызвавшая событие, является функциональной клавишей MouseEvent int getX() текущая абсцисса указателя мыши при генерации данного события

/>

int getY() текущая ордината указателя мыши при генерации данного события

/>

Point getPoint() положение указателя мыши при генерации данного события

/>

getClickCount() число нажатий на кнопку мыши при генерации данного события

/>

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

Классы, ответственные заобработку событий в JDK 1.1, реализуют интерфейсы “прослушивания” событий (listeners):


/>

Интерфейс Переопределяемые методы Описание ActionListener

actionPerformed

(ActionEvent e)

произведено некоторое действие AdjustmentListener adjustementValueChanged (AdjustmentEvent) изменилось значение в линии прокрутки ComponentListener componentResized (ComponentEvent e) компонент изменил размер

/>

componentMoved

(ComponentEvent e)

компонент изменил расположение

/>

componentShown

(ComponentEvent e)

компонент отображен

/>

componentHidden (ComponentEvent e) компонент спрятан ContainerListener

componentAdded

(ContainerEvent e)

компонент добавлен

в контейнер

/>

componentRemoved (ContainerEvent e) компонент убран из контейнера FocusListener focusGained(FocusEvent e) компонент получил фокус ввода

/>

focusLost (FocusEvent e) компонент потерял фокус ввода ItemListener ItemStateChaged (ItemEvent e) изменился выделенный пункт выбора KeyListener keyTyped(KeyEvent e) напечатан символ

/>

keyPressed(KeyEvent e) нажата клавиша

/>

keyReleased(KeyEvent e) нажатая клавиша отпущена MouseListener mouseClicked(MouseEvent e) нажата и отпущена кнопка мыши

/>

mousePressed(MouseEvent e) нажата кнопка мыши

/>

mouseReleased(MouseEvent e) отпущена нажатая кнопка мыши

/>

mouseEntered(MouseEvent e) указатель мыши вошел в область компонента

/>

mouseExited(MouseEvent e) указатель мыши вышел из области компонента MouseMotionListener mouseDragged(MouseEvent e) перемещен указатель мыши при нажатой кнопке мыши

/>

mouseMoved(MouseEvent e) перемещен указатель мыши при не нажатой кнопке мыши TextListener textValueChanged(TextEvent e) текстовое значение изменилось WindowListener windowOpened(WindowEvent e) окно открыто

/>

windowClosing(WindowEvent e) окно закрывается

/>

windowClosed(WindowEvent e) окно закрыто

/>

windowIconified(WindowEvent e) окно минимизировано

/>

windowDeiconified

(WindowEvent e)

окно восстановило размеры после минимизации

/>

windowActivated

(WindowEvent e)

окно активировано (является окном ввода информации)

/>

windowDeactivated

(WindowEvent e)

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

Некоторым интерфейсамсобытий соответствуют открытые абстрактные классы-адаптеры, содержащие пустыеметоды для обработки событий:


Интерфейс Класс ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter KeyListener KeyAdapter MouseListener MouseAdapter MouseMotionListener MouseMotionAdapter MouseInputListener MouseInputAdapter WindowListener WindowAdapted

К действиям относятсясобытия, поступающие от компонентов:

Компонент Генерируемое событие Button нажатие на кнопку мыши MenuItem нажатие на кнопку мыши List нажатие на кнопку мыши

/>

нажатие на клавишу возврата каретки TextField нажатие на клавишу возврата каретки

Управляющие компонентырегистрируют “прослушивание” событий при помощи методов вида:

void addТипКомпонентаListener(объектРеализующийПрослушивание)

и освобождаются от“прослушивания” событий при помощи соответствующих методов вида:

void removeТипКомпонентаListener(объектРеализующийПрослушивание)

еще рефераты
Еще работы по информатике, программированию