Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Форма Windows с некоторыми примерами AWT

Abstract Window Toolkit ( AWT ) является Java «s оригинальная зависит от платформы оконная , графика и пользовательский интерфейс виджета инструментарий , предшествующий свинг . AWT является частью Java Foundation Classes (JFC) - стандартного API для предоставления графического пользовательского интерфейса (GUI) для программы Java. AWT также является набором инструментов GUI для ряда профилей Java ME . Например, профили конфигурации подключенного устройства требуют среды выполнения Java на мобильных телефонах. для поддержки Abstract Window Toolkit.

История [ править ]

Когда Sun Microsystems впервые выпустила Java в 1995 году, виджеты AWT обеспечивали тонкий уровень абстракции над лежащим в основе собственным пользовательским интерфейсом. Например, создание флажка AWT приведет к тому, что AWT напрямую вызовет базовую собственную подпрограмму, которая создала флажок. Однако флажок в Microsoft Windows не совсем то же самое, что флажок в Mac OS или в различных типах Unix.. Некоторые разработчики приложений предпочитают эту модель, поскольку она обеспечивает высокую степень соответствия базовому набору инструментов для работы с окнами и бесшовную интеграцию с собственными приложениями. Другими словами, программа с графическим интерфейсом пользователя, написанная с использованием AWT, выглядит как собственное приложение Microsoft Windows при запуске в Windows, но та же программа выглядит как собственное приложение Apple Macintosh при запуске на Mac и т. Д. Однако некоторым разработчикам приложений эта модель не нравится, потому что они предпочитают, чтобы их приложения выглядели одинаково на всех платформах.

В J2SE 1.2 , то Свинг инструментарий вытеснены виджеты AWT в. Помимо предоставления более богатого набора виджетов пользовательского интерфейса, Swing рисует свои собственные виджеты (используя Java 2D для вызова подпрограмм низкого уровня в локальной графической подсистеме) вместо того, чтобы полагаться на высокоуровневый модуль пользовательского интерфейса операционной системы. Swing предоставляет возможность использования либо «внешнего вида» собственной платформы, либо кроссплатформенного внешнего вида («Java Look and Feel»), который выглядит одинаково во всех оконных системах.

Архитектура [ править ]

AWT предоставляет два уровня API :

  • Общий интерфейс между Java и собственной системой, используемый для диспетчеров окон , событий и компоновки . Этот API лежит в основе программирования графического интерфейса пользователя Java, а также используется в Swing и Java 2D . Это содержит:
  • Базовый набор виджетов графического интерфейса пользователя, таких как кнопки, текстовые поля и меню. Он также предоставляет собственный интерфейс AWT , который позволяет библиотекам рендеринга, скомпилированным в собственный код, рисовать непосредственно на поверхности рисования объектов AWT .Canvas

AWT также предоставляет приложениям доступ к некоторым функциям более высокого уровня, например:

  • Доступ к панели задач на вспомогательных системах; а также
  • Возможность запускать некоторые настольные приложения, такие как веб-браузеры и почтовые клиенты, из приложения Java.

Ни AWT, ни Swing по своей сути не являются потокобезопасными . Следовательно, код, который обновляет графический интерфейс или обрабатывает события, должен выполняться в потоке диспетчеризации событий . Несоблюдение этого правила может привести к тупиковой ситуации или состязанию. Для решения этой проблемы служебный класс SwingWorker позволяет приложениям выполнять трудоемкие задачи после событий взаимодействия с пользователем в потоке диспетчеризации событий.

Смешивание компонентов AWT и Swing [ править ]

До Java 6 Update 12 смешивание компонентов Swing и базовых виджетов AWT часто приводило к нежелательным побочным эффектам, когда виджеты AWT появлялись поверх виджетов Swing независимо от их определенного z-порядка . Эта проблема возникла из-за того, что архитектура визуализации двух наборов инструментов виджетов сильно различалась, несмотря на то, что Swing заимствовал тяжелые верхние контейнеры у AWT. [1]

Начиная с Java 6 Update 12 , можно смешивать виджеты Swing и AWT без проблем с z-порядком. [2]

Пример [ править ]

import  java.applet.Applet ; import  java.awt. * ; import  java.awt.event. * ;открытый  класс  AppletApplication  extends  Applet  реализует  WindowListener  { public  static  void  main ( java . lang . String []  args )  {  AppletApplication  applet  =  new  AppletApplication ();  Фрейм  w  =  новый  фрейм ( «Аплет» );  ш . addWindowListener ( апплет );  ш . добавить ( "Центр" ,  апплет );  ш . setSize ( 50 ,  50 );  ш. setVisible ( правда );  апплет . init ();  апплет . start ();  } общественная  пустота  краска ( Графика  г )  {  супер . краска ( г );  г . drawString ( «Привет, мир» ,  10 ,  10 ); // Верхний левый угол  } public  void  windowClosing ( WindowEvent  e )  {  System . выход ( 0 ); // Выход из приложения при закрытии окна  }  // Обязательные методы  public  void  windowActivated ( WindowEvent  e )  {  }  public  void  windowClosed ( WindowEvent  e )  {  }  public  void  windowDeactivated ( WindowEvent  e )  {  }  public  void  windowDeiconified ( WindowEvent  e )  {  }  public  void  windowIconified ( WindowEvent  e )  {  }  public  пустота windowOpened ( WindowEvent  e )  {  }}

Реализация [ править ]

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

Создан новый проект Caciocavallo , который предоставляет Java API на основе OpenJDK для упрощения реализации AWT в новых системах. [3] [4] В проекте успешно реализованы виджеты AWT с использованием Java2D . [5] С тех пор все необходимые модификации core-JDK были перенесены в OpenJDK 7 , [6] что означает, что теперь Java может использоваться в графическом стеке, отличном от одного из тех, которые предоставляются официальным JDK ( X Window System , OpenGL или DirectX ), включив внешнюю библиотеку и задав некоторые системные свойства. DirectFB бакэнду для качокавалла[7] находится в стадии разработки, как и серверная часть HTML5 ; цель состоит в том, чтобы развернуть существующие приложения Swing - без поддержки Java - как обычные веб-приложения, работающие на веб-сервере. [7] [8]

См. Также [ править ]

  • Качели (Java)
  • Стандартный набор инструментов виджетов

Ссылки [ править ]

Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.

  1. ^ Фаулер, Эми (1994). «Смешивание тяжелых и легких компонентов» . Sun Microsystems . Архивировано 23 декабря 2011 года . Проверено 17 декабря 2008 года .
  2. ^ "Ошибка / RFE исправлена ​​в текущей сборке JDK 6u12" . Sun Microsystems . 12 декабря 2008 года Архивировано из оригинала 17 декабря 2008 года . Проверено 17 декабря 2008 года .
  3. Торре, Марио (2 марта 2008 г.). «ЗАКЛЮЧИТЕЛЬНОЕ ПРЕДЛОЖЕНИЕ: переносимые серверные части графического интерфейса» . Архивировано 19 марта 2012 года . Проверено 7 сентября 2008 года .
  4. ^ Kennke, Роман (18 декабря 2008). «Обзор архитектуры Качокавалло» . Проверено 7 сентября 2008 года .
  5. ^ Kennke, Роман (3 сентября 2008). «Пэры Cacio Swing AWT» . Архивировано 13 марта 2012 года . Проверено 7 сентября 2008 года .
  6. ^ "Сколько было продвинуто вверх по течению?" . openjdk.java.net. 20 сентября 2009 года. Архивировано 19 марта 2012 года . Проверено 7 марта 2010 года . Вам больше не нужны эти патчи, с последней версией FontManager, теперь все находится в апстриме, поэтому просто используйте репозиторий Cacio, он полностью автономен.
  7. ^ a b Кеннке, Роман (28 июля 2011 г.). "JDK7 и Cacio крутость" . Проверено 8 августа 2011 года .
  8. ^ Эйссерер, Клеменс. «Бэкэнд HTML5 / Canvas для Caciocavallo (GNU-Classpath)» . Архивировано из оригинального 21 марта 2012 года . Проверено 8 августа 2011 года .

Внешние ссылки [ править ]

  • java.awt( Документация по AWT Javadoc API)
  • Документация AWT
  • AWT / качели
  • java.awt