Java как центр архипелага - [14]

Шрифт
Интервал

gridbag.setConstraints (button1, c);

add (button1);

. . .

// здесь можно изменить некоторые установки

// об®екте класса GridBagConstraints,

// например

// c.fill =  GridBagConstraints.NONE;

Button buttonX= new Button ("X");

gridbag.setConstraints (buttonX, c);

add (buttonX);

          4.3.4. События

В  AWT,  как и в других оконных средах, события как программные

об®екты соответствуют внешним событиям. Типичный пример - нажа-

тие на кнопку, в  результате  чего  в  AWT  происходит  событие

ACTION_EVENT.

Таким образом, интерактивная часть программ в AWT соответствует

модели  программы, управляемой событиями. Другими словами, при-

ложения или аплеты должны отслеживать  события  и  обрабатывать

их.

Рассмотрим  подробнее, как это происходит в AWT. Каждый оконный

интерфейс можно рассматривать как  набор  (возможно,  вложенных

друг  в друга) компонент. Когда происходит событие, связанное с

каким-то элементом интерфейса (например, кнопкой), то вызывает-

ся метод handleEvent. По умолчанию этот метод ничего не делает,

а просто передает событие наверх, то есть тому об®екту, в кото-

ром содержится инициатор события (например, об®емлющему  окну).

Таким  образом, если событие никто не перехватывает, оно дости-

гает фрейма (если это приложение) или аплета.

Этот базовай механизм обработки событий при наивном  применении

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

- Во-первых,  можно позволить всем событиям всплывать до самого

верха и уже на уровне фрейма писать метод,  который  занимается

разбором и обработкой событий.

- Во-вторых,  можно  создать множество специализированных клас-

сов, в каждом из которых переопределен метод handleEvent.

Оба этих крайних подхода небезупречны. Первый способствует  на-

писанию  монолитных  программ, второй приводит к очень большому

числу классов.

В  реальной  жизни  используется  компромиссная   идеология   -

handleEvent переопределяется для составных об®ектов, об®единяю-

щих несколько элементов интерфейса и отвечающих за ясно опреде-

ленную  часть  работы приложения (например, разного рода диало-

ги).

Кроме того, возможны и другие модели обработки событий, направ-

ленные на лучшее отделенин логики программы от ее интерфейса. В

качестве одного из примеров  реализации  альтернативной  модели

можно  указать пакет "The Command Class for AWT objects", кото-

рый написал Jan Newmarch, [email protected].

          4.3.5. Методы класса Component, связанные с обработкой событий

Ниже перечислены методы класса Component, связанные с  обработ-

кой событий.

- postEvent(). Этот метод, как правило, вызывается автоматичес-

ки при наступлении соответствующего события.

- Обрабатываются  события  при  помощи метода handleEvent(). По

умолчанию этот метод, в зависимости от типа  события,  вызывает

один из специализированных обработчиков событий, таких как

- - action()

- - keyUp()

- - mouseDown()

- - gotFocus()

и т.д.

Метод  handleEvent()  может  быть переопределен. В этом случае,

как правило, вся обработка соответствующего события будет  про-

исходить именно в этом методе, однако, если handleEvent() возв-

ращает  false,  то вызывается handleEvent() для контейнера, со-

держащего данную компоненту.

События в AWT представляются с помощью об®ектов класса Event, в

котором определены следующие переменные:

public Object target; // инициатор события

public long when;     // время, когда событие произошло

public int  id;       // тип события(KEY_PъESS, MOUSE_DOWN...)

public int  x;        // координаты

public int  y;        // курсора

public int  key;      // код клавиши

public int  modifiers;// код модификатора (control, shift ...)

public Object arg;    // вспомогательные данные

public Event evt;     // поле для соединения событий в списки

Приведем типичный пример обработки событий, когда все они обра-

батываются на верхнем уровне (в данном случае на  уровне  апле-

та).

class MyApplet extends Applet {

. . .

  public boolean action( Event evt, Object arg) {

    . . .

    if ((ev.target instanceof Button) && arg.equals ("OK")) {

      // Выполнить соответствующие действия

      . . .

      return true;

    } else {

      // Другие случаи

      . . .

    }

    . . .

    return false;

  }

  . . .

}

В  этом примере, если инициатор события имеет тип Button с име-

нем "OK", то выполняются соответствующие действия и возвращает-

ся значение true, то есть событие дальше не передается.

Другой способ обработать событие заключается в создании специа-

лизированной компоненты. Пример.

class OKButton extends Button {

  . . .

  public boolean action (Event e, Object arg) {

    // Выполнить соответствующие действия

    . . .

    return true;

  }

}

Мы видим, насколько глубоко продумана в проекте  Java  связь  с

операционным окружением. Удалось достичь удачного сочетания бо-

гатства возможностей с переносимостью.


        5. Joe - технология связывания Java-программ

с об®ектными бизнес-приложениями

Выше, в разделе "Java, Joe и NEO", мы писали о том,  что  новый

продукт  компании  SunSoft  -  Joe - призван осуществлять связь

между клиентскими компонентами, написанными на  языке  Java,  и

об®ектными  серверами  приложений,  созданными в среде NEO. При


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Фундаментальные алгоритмы и структуры данных в Delphi

Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».В книге подробно рассматриваются базовые понятия алгоритмов и основополагающие структуры данных, алгоритмы сортировки, поиска, хеширования, синтаксического разбора, сжатия данных, а также многие другие темы, тесно связанные с прикладным программированием.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.