Набор инструментов для абстрактного окна - Abstract Window Toolkit
В Набор инструментов для абстрактного окна (AWT) является Ява исходный платформенно-зависимый окна, графика, и пользовательский интерфейс набор инструментов для виджетов, предшествующий Качать. AWT является частью Базовые классы Java (JFC) - стандарт API за предоставление графический интерфейс пользователя (GUI) для программы на Java. AWT также является набором инструментов GUI для ряда Java ME профили. Например, Конфигурация подключенного устройства профили требуют Java время выполнения на мобильные телефоны для поддержки Abstract Window Toolkit.
История
Когда Sun Microsystems Виджеты AWT, впервые выпущенные на Java в 1995 году, обеспечивали тонкий уровень абстракции над лежащим в основе собственным пользовательским интерфейсом. Например, создание AWT флажок заставит AWT напрямую вызвать базовую собственную подпрограмму, которая создала флажок. Однако флажок на Майкрософт Виндоус не совсем то же самое, что флажок на 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 GUI программирование, а также используется Качать и Java 2D. Это содержит:
- Интерфейс между собственной оконной системой и приложением Java;
- Ядро графического интерфейса мероприятие подсистема;
- Несколько менеджеры по расположению;
- Интерфейс к устройства ввода Такие как мышь и клавиатура; и
- А
java.awt.datatransfer
упаковка для использования с Буфер обмена и Перетащить и отпустить.
- Базовый набор виджетов графического интерфейса пользователя, таких как кнопки, текстовые поля и меню. Он также предоставляет Собственный интерфейс AWT, что позволяет рендеринг библиотеки составлен в собственный код рисовать прямо в AWT
Холст
объект поверхность рисования.
AWT также делает некоторые функции более высокого уровня доступными для приложений, например:
- Доступ к системный трей по вспомогательным системам; и
- Возможность запуска некоторых настольных приложений, таких как веб-браузеры и почтовые клиенты из приложения Java.
Ни AWT, ни Swing по своей сути потокобезопасный. Следовательно, код, который обновляет графический интерфейс или обрабатывает события, должен выполняться на Поток диспетчеризации событий. Невыполнение этого может привести к тупик или состояние гонки. Для решения этой проблемы служебный класс под названием SwingWorker позволяет приложениям выполнять трудоемкие задачи после событий взаимодействия с пользователем в потоке диспетчеризации событий.
Смешивание компонентов AWT и Swing
До Java 6 (обновление 12), смешивание Качать компоненты и базовые виджеты AWT часто приводили к нежелательным побочным эффектам, когда виджеты AWT появлялись поверх виджетов Swing независимо от того, как они определены z-порядок. Эта проблема заключалась в том, что архитектура рендеринга двух наборов инструментов виджетов сильно отличалась, несмотря на то, что Swing заимствовал тяжелую вершину контейнеры от AWT.[1]
Начиная с Java 6 (обновление 12), можно смешивать виджеты Swing и AWT без проблем с z-порядком.[2]
Пример
импорт java.applet.Applet;импорт java.awt. *;импорт java.awt.event. *;общественный учебный класс AppletApplication расширяет Апплет орудия WindowListener { общественный статический пустота главный(Ява.язык.Нить[] аргументы) { AppletApplication апплет = новый AppletApplication(); Рамка ш = новый Рамка(«Аплет»); ш.addWindowListener(апплет); ш.Добавить("Центр", апплет); ш.setSize(50, 50); ш.setVisible(истинный); апплет.в этом(); апплет.Начните(); } общественный пустота краска(Графика грамм) { супер.краска(грамм); грамм.drawString("Привет, мир", 10, 10); // Левый верхний угол } общественный пустота windowClosing(WindowEvent е) { Система.выход(0); // Выход из приложения при закрытии окна } // Обязательные методы общественный пустота windowActivated(WindowEvent е) { } общественный пустота windowClosed(WindowEvent е) { } общественный пустота windowDeactivated(WindowEvent е) { } общественный пустота окно(WindowEvent е) { } общественный пустота windowIconified(WindowEvent е) { } общественный пустота windowOpened(WindowEvent е) { }}
Выполнение
Поскольку AWT является мостом к базовому собственному пользовательскому интерфейсу, его реализация на новом Операционная система может потребовать много работы, особенно если в нем задействованы какие-либо виджеты графического интерфейса AWT, потому что каждый из них требует, чтобы его собственные партнеры были разработаны с нуля.
Новый проект, Caciocavallo, был создан, что обеспечивает OpenJDK API на основе Java для упрощения реализации AWT в новых системах.[3][4] В проекте успешно реализованы виджеты AWT с использованием Java2D.[5] С тех пор все необходимые модификации core-JDK были перенесены в OpenJDK 7,[6] это означает, что теперь Java может использоваться в графическом стеке, отличном от одного из тех, которые предоставлены официальным JDK (X Window System, OpenGL или же DirectX ), включив внешнюю библиотеку и задав некоторые системные свойства. А DirectFB бэкэнд для Caciocavallo[7] находится в стадии разработки, как и HTML5 бэкэнд; цель состоит в том, чтобы развернуть существующие приложения Swing - без поддержки Java - как обычные веб-приложения, работающие на веб-сервере.[7][8]
Смотрите также
Рекомендации
Статья основана на материалах, взятых из Бесплатный онлайн-словарь по вычислительной технике до 1 ноября 2008 г. и зарегистрированы в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.
- ^ Фаулер, Эми (1994). «Смешивание тяжелых и легких компонентов». Sun Microsystems. В архиве из оригинала 23 декабря 2011 г.. Получено 17 декабря 2008.
- ^ «Ошибка / RFE исправлена в текущей сборке JDK 6u12». Sun Microsystems. 12 декабря 2008. Архивировано с оригинал 17 декабря 2008 г.. Получено 17 декабря 2008.
- ^ Торре, Марио (2 марта 2008 г.). «ЗАКЛЮЧИТЕЛЬНОЕ ПРЕДЛОЖЕНИЕ: переносимые серверные части графического интерфейса». В архиве из оригинала 19 марта 2012 г.. Получено 7 сентября 2008.
- ^ Кеннке, Роман (18 декабря 2008 г.). «Обзор архитектуры Качокавалло». Получено 7 сентября 2008.
- ^ Кеннке, Роман (3 сентября 2008 г.). «Пэры Cacio Swing AWT». В архиве из оригинала 13 марта 2012 г.. Получено 7 сентября 2008.
- ^ "Сколько было продвинуто вверх по течению?". openjdk.java.net. 20 сентября 2009 г. В архиве из оригинала 19 марта 2012 г.. Получено 7 марта 2010.
Вам больше не нужны эти патчи, с последней версией FontManager, теперь все находится в апстриме, поэтому просто используйте репозиторий Cacio, он полностью автономен.
- ^ а б Кеннке, Роман (28 июля 2011 г.). "JDK7 и Cacio крутость". Получено 8 августа 2011.
- ^ Эйссерер, Клеменс. "Бэкэнд HTML5 / Canvas для Caciocavallo (GNU-Classpath)". Архивировано из оригинал 21 марта 2012 г.. Получено 8 августа 2011.
внешняя ссылка
java.awt
(AWT Javadoc Документация по API)- Документация AWT
- AWT / Swing
- java.awt