Главная » Java » Java.awt — Abstract Window Toolkit

0

 

   Пакет Abstract Window Toolkit позволяет создавать графические интерфейсы пользователя (graphical user interfaces — GUI), способные предсказуемым образом работать на любой системе. Объекты классов AWT воспроизводят графические компоненты (такие как кнопки, метки или поля ввода текста), приноравливаясь (по умолчанию) к стандартам отображения графики, принятым для соответствующей платформы.

   Чтобы заставить графическое приложение работать верно, необходимо изменить подход к компоновке интерфейса. Возможно, вы пользуетесь такими интерактивными инструментальными средствами программирования, которые позволяют размещать графические компоненты на экране в точности там, где им положено быть. Подобное решение, предполагающее абсолютное позиционирование (absolute positioning) элементов на экране, не способно обеспечить переносимость кода, поскольку, например, размеры стандартных кнопок в тех или иных системах различаются. Если попытаться выполнить такое приложение в системе, отличной от той, где оно разрабатывалось, вполне возможно, что некоторые компоненты интерфейса перекроют друг друга, а другие будут разделены чрезмерно большими "дырами".

   Хотя AWT и поддерживает средства абсолютного позиционирования, применять их обычно не рекомендуется. Помещая компонент внутрь экранного фрейма AWT, целесообразно довериться решению, предлагаемому менеджером компоновки (layout manager) фрейма. Почти все менеджеры компоновки обеспечивают возможности относительного позиционирования (relative positioning), при котором положение и размеры одного компонента выбираются в сопоставлении с Параметрами других компонентов интерфейса.  Все стандартные классы  менеджеров компоновки реализуют либо базовый интерфейс LayoutManager, либо расширенный интерфейс LayoutManager2. Среди менеджеров компоновки есть как простые (FlowLayout, скажем, добавляет очередной компонент в текущий ряд компонентов либо переносит его в новый ряд, если предыдущий заполнен), так и более изощренные (примером может служить класс GridBagLayout, обладающий чрезвычайно высокой степенью гибкости). Вполне возможно и реально создать и собственный тип менеджера компоновки.

   Теперь вам не нужно заботиться о том, в каком месте окна разместить какие-нибудь флажок или кнопку, — следует только выбрать подходящий менеджер компоновки и поразмыслить, каким образом все компоненты должны соотноситься друг с другом. Если такая задача решена верно, интерфейс будет выглядеть сообразно и "чисто" в любой графической среде.

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

   Если необходимо вывести на экран собственное графическое изображен, этой цели можно достичь, например, средствами класса, производного от типов Component либо Container, переопределяя метод paint и передавая последнему соответствующий объект Graphics. Если в составе пакета нет готовых классов графических компонентов, удовлетворяющих вашим намерениям, в качестве базы для наследования разумно использовать абстрактный класс Component; если же возникает задача создания компонента, содержащего другие компоненты, целесообразно заняться расширением класса Container.

   AWT относится к категории графических сред, управляемых событиями (event-driven). Когда пользователь выполняет некоторое действие, такое как перемещение указателя мыши, щелчок ее кнопкой либо нажатие клавиши, система генерирует определенное событие (event), в объекте которого фиксируются идентификатор компонента, послужившего источником события, и описание последнего. Затем событие помещается в общую очередь событий (event queue), поддерживаемую единственным потоком-диспетчером событий (event thread). Поток извлекает из очереди очередной объект события и отсылает его для обработки компоненту-источнику. Возникновение события может быть спровоцировано и самой программой — например, вызовом метода repaint, который помещает событие UPDATE в очередь событий, либо даже посредством создания объекта события и включения его в очередь напрямую.

   Объект графического компонента получает уведомление о событии (манипуляциях мышью, клавиатурой и т.д.) при вызове потоком-диспетчером событий соответствующего метода этого объекта. Помимо того, программа вправе зарегистрировать специальные объекты-слушатели (listeners), получающие уведомления в случае возникновения событий, относящихся к определенному компоненту. Вот как может выглядеть код создания кнопки, позволяющей пользователю завершить работу программы:

 

Button b = new Button("BbixoA")

b.addActionListener (

new ActionListener()   {

public void actionPerformed(ActionEvent  e)   {

System.exit(O);

    }

  }

};

gui.add(b);     // Разместить кнопку в окне

 

   Любое базовое действие по отношению к компоненту, такое как нажатие клавиши или выбор флажка, приводит к возникновению события действия (action event).

Класс ActionEvent обеспечивает всеобъемлющую поддержку событий действия              например, реакцию на нажатие управляющей клавиши (скажем, <Alt> или <Ctrl>), сопровождающее выполняемое действие. Чтобы компонент получил уведомление о событии действия, следует подтвердить "заинтересованность" компонента, либо зарегистрировав объект ActionLi stener, как показано выше, либо вызвав метод enableEvents объекта компонента с заданием соответствующей маски, которая определяет типы событий, подлежащих обработке.

   Интерфейс ActionLi stener, использованный в предыдущем примере, относится к категории интерфейсов-слушателей (listener interfaces). Интерфейсы-слушатели наследуют базовый интерфейс Java, uti I . EventLi stener и отвечают особенностям событий определенной разновидности, имеющих отношение к мыши, клавиатуре, окну, элементу, тексту, контейнеру и т.п. Объект, реализующий интерфейс-слушатель, при возникновении события провоцирует выполнение соответствующего метода, к которому обращается поток-диспетчер событий: вызывается метод processEvent объекта компонента, который обращается к методу processAXYEvent, отвечающему событию, откуда, в свою очередь, вызываются методы XXXOccured всех зарегистрированных объектов-слушателей, реагирующих на это событие (под Осей red в каждом конкретном случае подразумевается название определенного действия).

   Другие классы пакета java.awt позволяют управлять цветом, шрифтами и т.п. Все подобные свойства по умолчанию наследуются от внешних компонентов — так, например, кнопка по умолчанию примет палитру цветов, которая установлена для фрейма, куда эта кнопка помещена. Такое поведение легко переопределить на любом уровне иерархии компонентов — достаточно задать значение цвета (или установить иное свойство) принудительно; значение будет сохраняться для всех компонентов низших уровней, если также, в свою очередь, не окажется переопределенным.

Ниже перечислены пакеты, вложенные в java.awt:

 

* Java.awt.color — управление цветом;

 

* Java, awt. datatransfer—     обмен    данными    между    приложениями

(например, с помощью команд Вырезать, Копировать и Вставить);

 

* Java. awt. dnd—    функции,     реализующие    технологию    " перетащи-и-опусти" (drag-and drop);

 

* Java. awt. event— различные интерфейсы-слушатели и классы, обеспе

чивающие реакцию прикладного кода на события;

 

* Java.awt. font — поддержка шрифтов;

 

* Java.awt. geom — функции двумерной геометрии;

 

* java. awt.im — интерфейсы методов ввода (input method) для работы с

локализованными устройствами ввода данных;

 

* Java. awt. image — различные интерфейсы и классы, позволяющие мани

пулировать графическими изображениями;

 

*Java, awt. pri nt — функции печати данных.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии