ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 145

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


возвращает новый объект, размеры которого составлены из наибольших значений объектов s1 и s2, метод

public static Spring minus(Spring s)

возвращает новый объект, размеры которого равны размерам объекта s с обратным знаком, а метод

public static Spring sum(Spring s1, Spring s2)

возвращает новый объект, размеры которого равны сумме соответствующих размеров объек­тов s1 и s2.

Объект класса Spring используется для построения объ­екта вложенного класса SpringLayout.Constraints.

Объект этого класса содержит координаты x и у, ширину width и высоту height, являющиеся объ­ектами класса Spring. Менеджер размещения SpringLayout меняет положение левого верхнего угла компонента в заданных объектами x и y пределах. Поэтому координаты обозначаются статическими строковыми константами WEST и NORTH класса SpringLayout. Величины x + width и y + height обозначаются статическими строковыми константами EAST и SOUTH и определяют положение правого нижнего угла компонента.

Для получения и установки всех этих значений в классе SpringLayout.Constraints определены методы:

  • void setX(Spring x)и Spring getX()– установка и получение координаты x;

  • void setY(Spring y)и Spring getY() – установка и получение координаты y;

  • void setWidth(Spring width)и Spring getWidth() – установка и получение ширины;

  • void setHeight(Spring height)и Spring getHeight()– установка и получение высоты.

Методы

public void setConstraint(String edgeName, Spring s)

и

public Spring getConstraint(String edgeName)

устанавливают и выдают объект класса Spring по заданному имени NORTH, WEST, SOUTH или EAST.

3.2.7. Менеджер компоновки GroupLayout


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

Каждая группа может содержать любое количество объектов класса Group или Component, а также промежуток (gap). Компоненты менеджера похожи на пружины. Каждый компонент имеет диапазон размеров, задаваемый минимальным, предпочитаемым и максимальным размерами, определяемыми с помощью методов getMinimumSize(), getPreferredSize() и getMaximumSize() класса Component. Промежуток также рассматривается как невидимый компонент с минимальным, предпочитаемым и максимальным размером. Кроме того, менеджер поддерживает предпочитаемый промежуток, который можно получить с помощью метода getPreferredGap() класса LayoutStyle.

Диапазон для объекта класса определяется типом группы: для последовательных групп диапазон равен сумме элементов, для параллельных – диапазону для максимального элемента.

Менеджер GroupLayout рассматривает каждую ось независимо, т.е. существует группа, представляющая вертикальную ось и группа, представляющая горизонтальную ось. Вертикальная ось определяет минимальный, предпочитаемый и максимальный размер по этой оси, установку координаты y и высоты компонент, а горизонтальная ось – минимальный, предпочитаемый и максимальный размер по этой оси, установку координаты x и ширины компонент. Каждый компонент должен быть задан и в вертикальной и в горизонтальной группе.

Конструктор

public GroupLayout(Container host)

задает групповую компоновку для контейнера host.

Метод

public void setAutoCreateGaps(boolean autoCreatePadding)

задает (при значении параметра autoCreatePadding, равном true) или отменяет (при значении параметра autoCreatePadding, равном false) автоматическую вставку промежутков между компонентами.

Горизонтальная и вертикальная группы создаются с помощью методов

public void setHorizontalGroup(GroupLayout.Group group)

public void setVerticalGroup(GroupLayout.Group group)

Оба эти метода содержат в качестве параметра объект

group вложенного класса Group, который задает позиции и размеры компонент вдоль горизонтальной или вертикальной оси.

Последовательная или параллельная группы создаются с помощью методов

public GroupLayout.SequentialGroup createSequentialGroup()

public GroupLayout.ParallelGroup createParallelGroup()

public GroupLayout.ParallelGroup createParallelGroup(

GroupLayout.Alignment alignment)

GroupLayout.ParallelGroup createParallelGroup(

GroupLayout.Alignment alignment, boolean resizable)

Предпоследний и последний методы задают (с помощью параметра alignment) выравнивание компонент в группе с помощью перечислимых переменных класса GroupLayout.Alignment: LEADING (выравнивание к началу группы), TRAILING (выравнивание к концу группы), CENTER (выравнивание по центру) и BASELINE (выравнивание по базовой линии). Последний метод задает также (с помощью параметра resizable) возможность изменения размера компонента.

Методы

public void linkSize(Component... components)

public void linkSize(int axis, Component... components)

позволяют установить одинаковый размер для всех заданных в качестве параметров компонент группы (второй метод – только для заданной оси, которая задается статическими константами HORIZONTAL и VERTICAL класса SwingConstants)/

3.3. Обработка событий в Java

3.3.1. Модель делегирования событий в Java


Операционная система, например Microsoft Windows, отслеживает все события, происходящие в системе. Система направляет эти события в соответствующие целевые объекты. Если, к примеру, пользователь щелкает по окну апплета, система создает событие mouse-down (нажатие клавиши мыши) и отсылает его данному окну для обработки. Затем это окно может выполнить некоторую операцию или попросту передать событие обратно системе для обработки по умолчанию.

В языке Java события представляют собой объекты некото­рых классов.

В JDK 1.0 существовал единственный класс Event, описывающий все события, на кото­рые программа может реагировать, а также определяющий методы по умолча­нию для получения информации о конкретном событии.

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

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

События, как и исключения, образуют иерархию классов. Корнем этой иерархии является класс EventObject, расширяющий класс Object.

Для класса определены два метода

public Object getSource()

и

public String toString(),

определяющие соответственно объект – источник события и строковое представление объекта-события.

События, связанные с графическим интерфейсом пользователя, в свою очередь, образуют ветвь в иерархии классов событий, корнем которой является класс AWTEvent, расширяющий класс EventObject.

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


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

Семантические события строятся на базе низкоуровневых событий. Например, для выбора команды меню может потребоваться раскрыть список команд первым щелчком мыши, а затем вторым щелчком выбрать в нем требуемую команду. Эта последовательность низкоуровневых событий может быть объединена в одно семантическое событие. Все остальные события, кроме событий ветви ComponentEvent, являются семантическими (эти компоненты будут рассмотрены далее).

3.3.2. Классы и интерфейсы обработки низкоуровневых событий


В каждом классе событий определены соответствующие свойства и методы для обработки событий.

Почти каждый тип события, за исключением PaintEvent и InputEvent, имеет связанный с ним интерфейс или интерфейсы блоков прослушивания, в которых объявлены методы обработки данного типа события. Эти интерфейсы являются расширениями интерфейса EventListener, не определяющего никаких переменных и методов.

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

3.3.2.1. Класс ComponentEvent и интерфейс ComponentListener


Класс ComponentEvent обрабатывает события, связанные с изменением компонента. Причину изменения можно определить с помощью следующих статических final переменных класса типа int:

  • COMPONENT_MOVED – компонент переместился;

  • COMPONENT_RESIZED – компонент изменил размер;

  • COMPONENT_HIDDEN – компонент убран с экрана;

  • COMPONENT_SHOWN – компонент появился на экране;

  • COMPONENT_FIRST – первый номер в списке идентификаторов, используемых для событий компонента;

  • COMPONENT_LAST – последний номер в списке идентификаторов, используемых для событий компонента.

Метод класса

public Component getComponent()

возвращает компонент – источник события.

Интерфейс ComponentListener содержит объявления следующих методов обработки событий компонент: