Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры-2 оопип часть 4.doc
Скачиваний:
46
Добавлен:
01.04.2014
Размер:
445.44 Кб
Скачать

58. Swing-технология

Swing это набор для создания богатого графического интерфейса пользователя (GUI) для ваших Java программ и апплетов.

Создание сложного GUI при помощи AWT практически невозможно, поскольку в AWT нет основных интерфейсных примитивов. Swing же предоставляет этот набор и не только. Он также делает создание GUI более легким за счет применения набора настраиваемых границ (Borders) и менеджеров размещения (LayoutManagers).

Отметим, что практически все компоненты Swing начинаются с главенствующей буквы J (JFrame, JTable, JMenu). Названия всех компонентов очевидны, и сходны с теми, которые использовались в AWT. К примеру, если в AWT в роли окна верхнего уровня использовалось Frame, в Swing используется в аналогичной роли JFrame. Краткое описание некоторых важных элементов, которых не имела в своем активе AWT приведены ниже. JInternalFrame Окно, существующее внутри другого окна верхнего уровня, например в JFrame.

JProgressBar Строка, отображающая процесс проистечения какого-то события, например процесс загрузки.

JSlider «Ползунок», позволяющий пользователю выбирать предел отображения величин.

JTable Компонент, представляющий данные в виде таблиц.

JTree Компонент, представляющий данные в иерархическом виде.

Интерфейс, настраивающийся под вашу платформу

Вторым преимуществом Swing является настраивающийся внешний вид ваших приложений (Look&Feel). Это значит, что внешний вид может динамически изменяться. Приложение может выглядеть как Windows , Unix, или Macintosh программа, либо же может иметь вид Java программы.

Большинство Swing компонентов построено по модифицированной версии Модель-Вид-Контроллер (MVC).

Встроенная поддержка HTML позволяет легко изменить внешний вид компонента. Объявление кнопки обычно выглядит так:

JButton myButton = new JButton("OK");

Если вы хотите сделать надпись “ОК” немного больше и сделать ее красным цветом, вы можете использовать соответствующий HTML тэг:

JButton myButton = new JButton

("<html><b><font color="red">OK</font></b></html>");

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

Событие (event) в библиотеке AWT возникает при воздействии на компонент какими-нибудь манипуляциями мышью, при вводе с клавиатуры, при перемещении окна, изменении его размеров.

Объект, в котором произошло событие, называется источником (source) события.

Все события в AWT классифицированы. При возникновении события исполняющая система Java автоматически создает объект соответствующего событию класса. Этот объект не производит никаких действий, он только хранит все сведения о событии.

Во главе иерархии классов-событий стоит класс Eventobject из пакета java.utii — непосредственное расширение класса object. Его расширяет абстрактный класс AWTEvent из пакета java.awt — глава классов, описывающих события библиотеки AWT. Все классы, отображенные на рисунке, кроме класса AWTEvent, собраны в пакет java.awt.event.

Методы обработки событий описаны в интерфейсах- слушателях (listener). Для каждого показанного типа событий, кроме inputEvent (это событие редко используется самостоятельно), есть свой интерфейс. Имена интерфейсов составляются из имени события и слова Listener, например, ActionListener, MouseListener. Методы интерфейса "слушают", что происходит в потенциальном источнике события. При возникновении события эти методы автоматически выполняются, получая в качестве аргумента объект-событие и используя при обработке сведения о событии, содержащиеся в этом объекте.

Чтобы задать обработку события определенного типа, надо реализовать соответствующий интерфейс. Классы, реализующие такой интерфейс, классы-обработчики (handlers) события,, называются слушателями (listeners): они "слушают", что происходит в объекте, чтобы отследить возникновение события и обработать его.

Чтобы связаться с обработчиком события, классы-источники события должны получить ссылку на экземпляр eventHandier класса-обработчика события одним из методов addXxxListener(XxxEvent eventHandier), где Ххх — имя события.

Таким образом, компонент-источник, в котором произошло событие, не занимается его обработкой. Он обращается к экземпляру класса-слушателя, умеющего обрабатывать события, делегирует (delegate) ему полномочия по обработке.

Такая схема получила название схемы делегирования (delegation). Она удобна тем, что мы можем легко сменить класс-обработчик и обработать событие по-другому или назначить несколько обработчиков одного и того же события. С другой стороны, мы можем один обработчик назначить на прослушивание нескольких объектов-источников событий.

Эта схема кажется слишком сложной, но мы ей часто пользуемся в жизни. Допустим, мы решили оборудовать квартиру. Мы помещаем в нее, как в контейнер, разные компоненты: мебель, сантехнику, электронику, антиквариат. Мы предполагаем, что может произойти неприятное событие — квартиру посетят воры, — и хотим его обработать. Мы знаем, что классы-обработчики этого события — охранные агентства, — и обращаемся к некоторому экземпляру такого класса. Компоненты-источники события, т. е. те, которые могут быть украдены, присоединяют к себе датчики методом addXxxListener(). Затем экземпляр-обработчик "слушает", что происходит в объектах, к которым он подключен. Он реагирует на наступление только одного события — похищения прослушиваемого объекта, — прочие события, например, короткое замыкание или обрыв водопроводной трубы, его не интересуют. При наступлении "своего" события он действует по контракту, записанному в методе обработки.