Abstract Window Toolkit
<imagemap>: неверное или отсутствующее изображение |
Для улучшения этой статьи желательно?:
|
Abstract Window Toolkit (AWT) — это исходная платформо-независимая оконная библиотека графического интерфейса (Widget toolkit) языка Java. Сейчас AWT является частью Java Foundation Classes (JFC) — стандартного API для реализации графического интерфейса в Java-программе.
Также AWT является стандартной библиотекой GUI для некоторых профилей Java ME. Например, профили Connected Device Configuration требуют от среды исполнения Java на мобильных телефонах поддержки AWT.
Содержание
История
Когда Sun Microsystems впервые выпустила Java в 1995 году, виджеты AWT предоставляли тонкий уровень абстракции над основным родным пользовательским интерфейсом. Например, создание флажка AWT заставляет AWT напрямую вызвать более низкоуровневую нативную подпрограмму, которая и создает флажок. Однако, флажок (check box) на Microsoft Windows это не совсем то же, как флажок на Mac OS или на различных видах Unix. Некоторые разработчики предпочитают эту модель, поскольку она обеспечивает высокую степень соответствия основному оконному инструментарию и беспрепятственную интеграцию с родными приложениями. Другими словами, GUI программа, написанная с использованием AWT, выглядит как родное приложение Microsoft Windows, будучи запущенной на Windows, и в то же время как родное приложение Apple Macintosh, будучи запущенным на Mac, и т. д.. Однако, некоторым разработчикам не нравится эта модель, потому что они предпочитают, чтобы их приложения выглядели одинаково на всех платформах.
В J2SE 1.2 виджеты AWT были в значительной степени заменены аналогичными из Swing. В дополнение к предоставлению более богатого набора элементов интерфейса пользователя, Swing рисует свои собственные виджеты (с помощью Java 2D для вызова низкоуровневых подпрограмм местной графической подсистемы), вместо того чтобы полагаться на высоком уровне модуля пользовательского интерфейса операционной системы. Swing обеспечивает возможность использования либо системного «look and feel», который использует родной «look and feel» платформы, либо кросс-платформенный внешний вид («Java Look and Feel»), который выглядят одинаково на всех платформах. Тем не менее, Swing использует AWT для взаимодействия с родной оконной системой.
Архитектура
AWT предоставляет два уровня API:
- Общий интерфейс между Java и родной системой, используемый для управления окнами, события, менеджеры компоновки. Этот API является основой программирования Java GUI и используется также Swing и Java 2D. Он содержит:
- Интерфейс между родной оконной системой и Java приложением;
- Ядро обработчика событий интерфейса;
- Некоторые менеджеры компоновки;
- Интерфейс к устройствам ввода, таким как мышь и клавиатура; и
- Пакет
[java.sun.com/javase/6/docs/api/java/awt/datatransfer/package-summary.html java.awt.datatransfer]
для использования с буфером обмена и Drag and Drop.
- Базовый набор виджетов графического интерфейса, таких как кнопки, текстовые поля (text box) и меню. Она также предоставляет AWT Native Interface, который позволяет библиотекам в нативном коде рисовать непосредственно на
[java.sun.com/javase/6/docs/api/java/awt/Canvas.html Canvas]
.
AWT также предоставляет приложениям некоторую высокоуровневую функциональность:
- Доступ к области уведомлений на поддерживаемых системах; и
- Возможность запуска некоторых десктопных приложений, таких как веб-браузеры и почтовые клиенты из Java-приложения.
Ни AWT, ни Swing не являются по своей природе потокобезопасными. Таким образом, код, обновляющий GUI, или processes events должны выполняться в Event dispatching thread. Невыполнение этого требования может привести к взаимной блокировке или состязанию. Для решения этой проблемы служебный класс [java.sun.com/javase/6/docs/api/javax/swing/SwingWorker.html SwingWorker]
позволяет приложениям выполнять «тяжёлые» обработчики интерфейсных событий в потоке обработки событий.
Смешивание компонентов AWT и Swing
Начиная с Java 6#Java SE 6 Update 10 смешивание компонентов Swing и основных виджетов AWT часто приводило к нежелательным побочным эффектам, с появлением AWT виджетов над виджетами Swing, независимо от их определенного порядка наложения. Эта проблема объясняется тем, что архитектура рендеринга двух widget toolkits очень разная, несмотря на заимствование Swing’ом тяжеловесных контейнеров верхнего уровня из AWT[1].
Начиная с Java 6#Java SE 6 Update 12, стало возможно смешивать виджеты Swing and AWT без проблем с порядком наложения.
Реализация
Так как AWT является мостом к нижележащему нативному пользовательскому интерфейсу, его реализация на новой операционной системе может быть большой работой, главным образом для набора виджетов, которые требуют разработки с нуля нативных peers для каждого из виджетов AWT.
Одновременно с разработкой Java начал разрабатываться проект [hg.openjdk.java.net/caciocavallo/caciocavallo/raw-file/tip/cacio-docs/index.html Caciocavallo]. Его целью является предоставление Java API, основанных на OpenJDK для облегчения написания реализаций AWT для новых операционных систем.[2]. Для построения интерфейса используется Java2D. [3]. Все необходимые модификации включены в JDK начиная с версии OpenJDK 7[4].
См. также
- [en.wikibooks.org/wiki/Java_Swings/AWT Викикнига об AWT]
- Event dispatching thread
- AWT Native Interface (JAWT)
- Swing
- Standard Widget Toolkit
- SwingWorker
Напишите отзыв о статье "Abstract Window Toolkit"
Примечания
- ↑ Fowler, Amy [java.sun.com/products/jfc/tsc/articles/mixing/index.html Mixing heavy and light components]. Sun Microsystems (1994). Проверено 17 декабря 2008. [www.webcitation.org/67LJuQLZ8 Архивировано из первоисточника 2 мая 2012].
- ↑ Torre, Mario [mail.openjdk.java.net/pipermail/challenge-discuss/2008-March/000082.html FINAL PROPOSAL: Portable GUI backends] (2 March 2008). Проверено 7 сентября 2008. [www.webcitation.org/67LJv4s5V Архивировано из первоисточника 2 мая 2012].
- ↑ Kennke, Roman [rkennke.wordpress.com/2008/09/03/cacio-swing-awt-peers/ Cacio Swing AWT peers] (3 September 2008). Проверено 21 апреля 2013. [www.webcitation.org/6GEGSl3wV Архивировано из первоисточника 29 апреля 2013].
- ↑ [mail.openjdk.java.net/pipermail/caciocavallo-dev/2009-September/000184.html How much has been pushed upstream?]. openjdk.java.net (20 сентября 2009). — «You don't need anymore those patches, with the latest FontManager push, everything is upstream now, so just use the Cacio repo, it's completely self contained.» Проверено 7 марта 2010. [www.webcitation.org/67LJvUzIH Архивировано из первоисточника 2 мая 2012].
Ссылки
- [java.sun.com/products/jdk/awt/ AWT homepage]
-
[java.sun.com/javase/6/docs/api/java/awt/package-summary.html java.awt]
(AWT Javadoc API documentation)
|
Отрывок, характеризующий Abstract Window Toolkit
Быстро в полутьме разобрали лошадей, подтянули подпруги и разобрались по командам. Денисов стоял у караулки, отдавая последние приказания. Пехота партии, шлепая сотней ног, прошла вперед по дороге и быстро скрылась между деревьев в предрассветном тумане. Эсаул что то приказывал казакам. Петя держал свою лошадь в поводу, с нетерпением ожидая приказания садиться. Обмытое холодной водой, лицо его, в особенности глаза горели огнем, озноб пробегал по спине, и во всем теле что то быстро и равномерно дрожало.
– Ну, готово у вас все? – сказал Денисов. – Давай лошадей.
Лошадей подали. Денисов рассердился на казака за то, что подпруги были слабы, и, разбранив его, сел. Петя взялся за стремя. Лошадь, по привычке, хотела куснуть его за ногу, но Петя, не чувствуя своей тяжести, быстро вскочил в седло и, оглядываясь на тронувшихся сзади в темноте гусар, подъехал к Денисову.
– Василий Федорович, вы мне поручите что нибудь? Пожалуйста… ради бога… – сказал он. Денисов, казалось, забыл про существование Пети. Он оглянулся на него.
– Об одном тебя пг'ошу, – сказал он строго, – слушаться меня и никуда не соваться.
Во все время переезда Денисов ни слова не говорил больше с Петей и ехал молча. Когда подъехали к опушке леса, в поле заметно уже стало светлеть. Денисов поговорил что то шепотом с эсаулом, и казаки стали проезжать мимо Пети и Денисова. Когда они все проехали, Денисов тронул свою лошадь и поехал под гору. Садясь на зады и скользя, лошади спускались с своими седоками в лощину. Петя ехал рядом с Денисовым. Дрожь во всем его теле все усиливалась. Становилось все светлее и светлее, только туман скрывал отдаленные предметы. Съехав вниз и оглянувшись назад, Денисов кивнул головой казаку, стоявшему подле него.
– Сигнал! – проговорил он.
Казак поднял руку, раздался выстрел. И в то же мгновение послышался топот впереди поскакавших лошадей, крики с разных сторон и еще выстрелы.
В то же мгновение, как раздались первые звуки топота и крика, Петя, ударив свою лошадь и выпустив поводья, не слушая Денисова, кричавшего на него, поскакал вперед. Пете показалось, что вдруг совершенно, как середь дня, ярко рассвело в ту минуту, как послышался выстрел. Он подскакал к мосту. Впереди по дороге скакали казаки. На мосту он столкнулся с отставшим казаком и поскакал дальше. Впереди какие то люди, – должно быть, это были французы, – бежали с правой стороны дороги на левую. Один упал в грязь под ногами Петиной лошади.
У одной избы столпились казаки, что то делая. Из середины толпы послышался страшный крик. Петя подскакал к этой толпе, и первое, что он увидал, было бледное, с трясущейся нижней челюстью лицо француза, державшегося за древко направленной на него пики.
– Ура!.. Ребята… наши… – прокричал Петя и, дав поводья разгорячившейся лошади, поскакал вперед по улице.
Впереди слышны были выстрелы. Казаки, гусары и русские оборванные пленные, бежавшие с обеих сторон дороги, все громко и нескладно кричали что то. Молодцеватый, без шапки, с красным нахмуренным лицом, француз в синей шинели отбивался штыком от гусаров. Когда Петя подскакал, француз уже упал. Опять опоздал, мелькнуло в голове Пети, и он поскакал туда, откуда слышались частые выстрелы. Выстрелы раздавались на дворе того барского дома, на котором он был вчера ночью с Долоховым. Французы засели там за плетнем в густом, заросшем кустами саду и стреляли по казакам, столпившимся у ворот. Подъезжая к воротам, Петя в пороховом дыму увидал Долохова с бледным, зеленоватым лицом, кричавшего что то людям. «В объезд! Пехоту подождать!» – кричал он, в то время как Петя подъехал к нему.
– Подождать?.. Ураааа!.. – закричал Петя и, не медля ни одной минуты, поскакал к тому месту, откуда слышались выстрелы и где гуще был пороховой дым. Послышался залп, провизжали пустые и во что то шлепнувшие пули. Казаки и Долохов вскакали вслед за Петей в ворота дома. Французы в колеблющемся густом дыме одни бросали оружие и выбегали из кустов навстречу казакам, другие бежали под гору к пруду. Петя скакал на своей лошади вдоль по барскому двору и, вместо того чтобы держать поводья, странно и быстро махал обеими руками и все дальше и дальше сбивался с седла на одну сторону. Лошадь, набежав на тлевший в утреннем свето костер, уперлась, и Петя тяжело упал на мокрую землю. Казаки видели, как быстро задергались его руки и ноги, несмотря на то, что голова его не шевелилась. Пуля пробила ему голову.
Переговоривши с старшим французским офицером, который вышел к нему из за дома с платком на шпаге и объявил, что они сдаются, Долохов слез с лошади и подошел к неподвижно, с раскинутыми руками, лежавшему Пете.
– Готов, – сказал он, нахмурившись, и пошел в ворота навстречу ехавшему к нему Денисову.
– Убит?! – вскрикнул Денисов, увидав еще издалека то знакомое ему, несомненно безжизненное положение, в котором лежало тело Пети.
– Готов, – повторил Долохов, как будто выговаривание этого слова доставляло ему удовольствие, и быстро пошел к пленным, которых окружили спешившиеся казаки. – Брать не будем! – крикнул он Денисову.
Денисов не отвечал; он подъехал к Пете, слез с лошади и дрожащими руками повернул к себе запачканное кровью и грязью, уже побледневшее лицо Пети.
«Я привык что нибудь сладкое. Отличный изюм, берите весь», – вспомнилось ему. И казаки с удивлением оглянулись на звуки, похожие на собачий лай, с которыми Денисов быстро отвернулся, подошел к плетню и схватился за него.
В числе отбитых Денисовым и Долоховым русских пленных был Пьер Безухов.
О той партии пленных, в которой был Пьер, во время всего своего движения от Москвы, не было от французского начальства никакого нового распоряжения. Партия эта 22 го октября находилась уже не с теми войсками и обозами, с которыми она вышла из Москвы. Половина обоза с сухарями, который шел за ними первые переходы, была отбита казаками, другая половина уехала вперед; пеших кавалеристов, которые шли впереди, не было ни одного больше; они все исчезли. Артиллерия, которая первые переходы виднелась впереди, заменилась теперь огромным обозом маршала Жюно, конвоируемого вестфальцами. Сзади пленных ехал обоз кавалерийских вещей.