Набор инструментов для создания абстрактных окон

Набор инструментов GUI на основе Java

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

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

История

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

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

Архитектура

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

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

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

Смешивание компонентов AWT и Swing

Если есть версия Swing компонента AWT, она будет начинаться с J- и должна использоваться исключительно, заменяя версию AWT. Например, в Swing используйте только JButton, а не класс Button. Как упоминалось выше, основные классы AWT, такие как Color и Font, по-прежнему используются в Swing как есть.

При рисовании в Swing используйте JPanel и переопределите paintComponent(Graphics g) вместо использования методов AWT paint().

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

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

Пример

импорт java.awt.* ; импорт java.awt.event.WindowAdapter ; импорт java.awt.event.WindowEvent ;   публичный класс MyApp {    public static void main ( char [] args ) { Frame frame = new Frame ( "Application" ); frame . add ( new Label ( "Hello!" )); frame . setSize ( 500 , 500 ); frame . setLocationRelativeTo ( null ); // Центрирует рамку окна . addWindowListener ( new WindowAdapter () { @Override public void windowClosing ( WindowEvent e ) { frame . dispose (); // Освобождает собственные ресурсы экрана } }); frame . setVisible ( true ); } }                                  

Выполнение

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

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

Смотрите также

Ссылки

  1. ^ Фаулер, Эми (1994). «Смешивание тяжелых и легких компонентов». Sun Microsystems . Архивировано из оригинала 23 декабря 2011 г. Получено 17 декабря 2008 г.
  2. ^ "Bug/RFE исправлен в текущей сборке JDK 6u12". Sun Microsystems . 12 декабря 2008 г. Архивировано из оригинала 17 декабря 2008 г. Получено 17 декабря 2008 г.
  3. ^ Torre, Mario (2 марта 2008 г.). "FINAL PROPOSAL: Portable GUI backends". Архивировано из оригинала 19 марта 2012 г. Получено 7 сентября 2008 г.
  4. ^ Кеннке, Роман (18 декабря 2008 г.). "Обзор архитектуры Качокавалло" . Получено 7 сентября 2008 г.
  5. ^ Kennke, Roman (3 сентября 2008 г.). "Cacio Swing AWT peers". Архивировано из оригинала 13 марта 2012 г. Получено 7 сентября 2008 г.
  6. ^ "Сколько всего было загружено в апстрим?". openjdk.java.net. 20 сентября 2009 г. Архивировано из оригинала 19 марта 2012 г. Получено 7 марта 2010 г. Вам больше не нужны эти патчи, с последним релизом FontManager все теперь загружено в апстрим, так что просто используйте репозиторий Cacio, он полностью автономен.
  7. ^ ab Kennke, Roman (28 июля 2011 г.). "JDK7 и Cacio coolness" . Получено 8 августа 2011 г.
  8. ^ Eisserer, Clemens. "HTML5/Canvas backend for Caciocavallo (GNU-Classpath)". Архивировано из оригинала 21 марта 2012 г. Получено 8 августа 2011 г.
  • java.awt( документация API AWT Javadoc )
  • Документация АВТ
  • AWT/Свинг
  • java.awt
Взято с "https://en.wikipedia.org/w/index.php?title=Abstract_Window_Toolkit&oldid=1241387494"