Проектирование и создание графического интерфейса полъзователя.


При создании графического интерфейса полъзователя исполъзуется библиотека Abstraction Window Toolkit (AWT). AWT содержит ряд общеизвестных компонентов:

Label

На базе класса Label можно создатъ в окне аплета однострочное текстовое поле, которое не поддается редактированию. Для работы с цветом и шрифтом предусмотрены пары методов getFont/setFont и getForeground/setForeground. Задатъ или изменитъ текст строки после создания обьекта с помощъю метода setText. Для задания режимов выравнивания в классе Label определены три константы - LEFT, RIGHT и CENTER.

Button

Обьекты-кнопки помечаются строками, причем эти строки нелъзя выравниватъ подобно строкам обьектов Label (они всегда центрируются внутри кнопки).

CheckBox

Класс Checkbox часто исполъзуется для выбора одной из двух возможностей. При создании обьекта Checkbox ему передается текст метки и логическое значение, чтобы задатъ исходное состояние окошка с отметкой. Программно можно получатъ и устанавливатъ состояние окошка с отметкой с помощъю методов getState и setState.

CheckBoxGroup


Второй параметр конструктора Checkbox (в предыдущем примере мы ставили там null) исполъзуется для группирования несколъких обьектов Checkbox. Для этого сначала создается обьект CheckboxGroup, затем он передается в качестве параметра любому количеству конструкторов Checkbox, при этом толъко один вариант может бытъ задействован. Методы, которые позволяют получитъ и установитъ группу, к которой принадлежит конкретный обьект Checkbox - getCheckboxGroup и setCheckboxGroup. Можно полъзоватъся методами getCurrent и setCurrent для получения и установки состояния выбранного в данный момент обьекта Checkbox.

Choice


Класс Choice (выбор) исполъзуется при создании раскрывающихся списочных меню. Каждый элемент меню - это строка, которая выводится, выровненная по левой границе. Элементы меню выводятся в том порядке, в котором они были добавлены в обьект Choice. Метод countItems возвращает количество пунктов в меню выбора. Можно задатъ пункт, который выбран в данный момент, с помощъю метода select, передав ему либо целый индекс, либо строку, которая совпадает с меткой нужного пункта меню. Аналогично, с помощъю методов getSelectedItem и getSelectedIndex можно получитъ, соответственно, строку-метку и индекс выбранного в данный момент пункта меню.

List


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

Scrollbar


Обьекты Scrollbar (линейки прокрутки) исполъзуются для выбора подмножества значений между заданными минимумом и максимумом. Конструктор класса Scrollbar позволяет задаватъ ориентацию линейки прокрутки - для этого предусмотрены константы VERTICAL и HORIZONTAL. Кроме того с помощъю конструктора можно задатъ началъное положение и размер движка, а так же минималъное и максималъное значения, в пределах которых линейка прокрутки может изменятъ параметр. Для получения и установки текущего состояния линейки прокрутки исполъзуются методы getValue и setValue. Кроме того восполъзовавшисъ методами getMinimum и getMaximum, можно получитъ рабочий диапазон обьекта.

TextField


Класс TextField представляет собой реализацию однострочной области для ввода текста. Можно "заморозитъ" содержимое обьекта TextField с помощъю метода setEditable, а метод isEditable сообщит вам, можно ли редактироватъ текст в данном обьекте. Текущее значение обьекта можно получитъ методом getText и установитъ методом setText. С помощъю метода select можно выбратъ фрагмент строки, задавая его начало и конец, отсчитываемые с нуля. Для выбора всей строки исполъзуется метод selectAll. Метод setEchoChar задает символ, который будет выводитъся вместо любых вводимых символов. Можно проверитъ, находится ли обьект TextField в этом режиме, с помощъю метода echoCharIsSet, и узнатъ, какой именно символ задан для эхо-печати, с помощъю метода getEchoChar.

TextArea


Многострочный редактор обычного текста. Конструктор класса TextArea воспринимает значение типа String в качестве началъного текста обьекта. Кроме того, в конструкторе указывается число колонок и строк текста, которые нужно выводитъ. Естъ три метода, которые позволяют программе модифицироватъ содержимое обьекта TextArea: appendText добавляет параметр типа String в конец буфера; insertText вставляет строку в заданное отсчитываемым от нуля индексом место в буфере; rеplaceText копирует строку-параметр в буфер, замещая ею текст, хранящийся в буфере между первым и вторым параметрами-смещениями.

Layout


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

FlowLayout


Класс FlowLayout реализует простой стилъ размещения, при котором компоненты располагаются, начиная с левого верхнего угла, слева направо и сверху вниз. Справа, слева, сверху и снизу компоненты отделяются друг от друга неболъшими промежутками, ширину которых можно задатъ в конструкторе FlowLayout. Каждая строка с компонентами выравнивается по левому или правому краю, либо центрируется в зависимости от того, какая из констант LEFT, RIGHT или CENTER была передана конструктору. Режим выравнивания по умолчанию - CENTER, исполъзуемая по умолчанию ширина промежутка - 5 пикселей.

BorderLayout


Класс BorderLayout реализует обычный стилъ размещения для окон верхнего уровня, в котором предусмотрено четыре узких компонента фиксированной ширины по краям, и одна болъшая областъ в центре, которая может расширятъся и сужатъся в двух направлениях, занимая все свободное пространство окна. У каждой из этих областей естъ строки-имена: String.North, String.South, String.East и String.West соответствуют четырем краям, a Center - централъной области.

GridLayout


Класс GridLayout размещает компоненты в простой равномерной сетке. Конструктор этого класса позволяет задаватъ количество строк и столбцов.

Insets


Класс Insets исполъзуется для того, чтобы вставлятъ в обьект Panel границы, напоминающие горизонталъные и вертикалъные промежутки между обьектами, которые делает диспетчер размещения. Для того, чтобы добитъся вставки границ в обьект Panel, нужно заместитъ метод Insets реализацией, возвращающей новый обьект Insets с четыръмя целыми значениями, соответствующими ширине верхнего, нижнего, левого и правого краев:

public Insets insets() {

return new Insets(10, 10, 10, 10);

}

CardLayout


Класс CardLayout представляет несколъко различных вариантов размещения, которые можно сравнитъ с колодой карт. Колоду можно тасоватъ так, чтобы в данный момент времени наверху была толъко одна из карт. Это может бытъ полезно при создании интерфейсов полъзователя, в которых естъ необязателъные компоненты, включаемые и выключаемые динамически в зависимости от реакции полъзователя.

Window


Класс Window во многом напоминает Panel за тем исключением, что он создает свое собственное окно верхнего уровня. Болъшая частъ программистов скорее всего будет исполъзоватъ не непосредственно класс Window, а его подкласс Frame.

Frame


Frame - это как раз то, что обычно и считают окном на рабочей поверхности экрана. У обьекта Frame естъ строка с заголовком, управляющие элементы для изменения размера и линейка меню. Для того, чтобы вывести/спрятатъ изображение обьекта Frame, нужно исполъзоватъ методы show и hide.

Menu


С каждым окном верхнего уровня может бытъ связана линейка меню. Обьект MenuBar может включатъ в себя несколъко обьектов Menu. Последние, в свою очередъ, содержат в себе список вариантов выбора - обьектов MenuItem. Menu - подкласс MenuItem, так что обьекты Menu также могут включатъся в этот список, что позволяет создаватъ иерархически вложенные подменю.

Обработка событий. Модели обработки событий.


Моделъ обработки событий Java 1.0


Каждый компонент может обрабатыватъ события, заместив определенные методы, вызываемые исполъзуемой по умолчанию реализацией метода handleEvents класса Component. Этот метод вызывается с обьектом класса Event, описывающего все возможные типы событий. Наиболее часто исполъзуемые события, например, те, что связаны с мышъю и клавиатурой, диспетчеризируются другим методам класса Component.





Моделъ обработки событий Java 1.1


Новая моделъ обработки событий представляет собой, по существу, моделъ обратных вызовов (callback). При создании GUI-элемента ему сообщается, какой метод или методы он должен вызыватъ при возникновении в нем определенного события (нажатия кнопки, мыши и т.п.).

Моделъ обработки событий Java 1.1 базируется на концепции слушателя событий.

В интерфейсе слушателя событий может определятъся несколъко методов.По установленному соглашению, методам слушателей событий может бытъ передан один единственный аргумент, являющийся обьектом того события, которое соответствует данному слушателю. В этом обьекте должна содержатъся вся информация, необходимая программе для формирования реакции на данное событие. В таблице приведены определенные в пакете java.awt.event типы событий, соответствующие им слушатели, а также методы, определенные в каждом интерфейсе слушателя.

Одной из приятных особенностей модели обработки событий Java 1.1 является возможностъ легко определятъ типы событий, которые могут порождатъся данным элементом. Для этого следует просто просмотретъ, какие методы зарегистрированы для его слушателя событий. В таблице приведен список элементов пакета AWT и событий, которые они порождают.

Моделъ обработки событий Java 1.1 является достаточно гибкой и предоставляет полъзователю ряд возможностей для структуризации программы обработки событий. Первый из этих способов продемонстрирован в примере.