stringtranslate.com

Набор инструментов абстрактного окна

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

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

История

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

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

Архитектура

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

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

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

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

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

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

До 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 ) { Frameframe = new Frame ( «Приложение» ); рамка . add ( new Label ( "Привет!" )); рамка . УстановитьРазмер ( 500 , 500 ); рамка . setLocationRelativeTo ( ноль ); // Центрирует рамку окна . addWindowListener ( new WindowAdapter () { @Override public void windowClosing ( WindowEvent e ) { frame . Dispose (); // Освобождает собственные ресурсы экрана } }); рамка . УстановитьВидимый ( истина ); } }                                  

Выполнение

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

Внешние ссылки