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

редактировать

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

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

Содержание

  • 1 История
  • 2 Архитектура
  • 3 Смешивание компонентов AWT и Swing
  • 4 Пример
  • 5 Реализация
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки

История

Когда Sun Microsystems впервые выпустила Java в 1995 году, виджеты AWT обеспечивали тонкий уровень абстракции над лежащим в основе собственным пользовательским интерфейсом. Например, создание флажка AWT заставит AWT напрямую вызвать базовую внутреннюю подпрограмму, которая создала флажок. Однако флажок в Microsoft Windows не совсем то же самое, что флажок в Mac OS или в различных типах 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 по своей сути не являются потокобезопасный. Следовательно, код, который обновляет графический интерфейс или обрабатывает события, должен выполняться в потоке отправки событий . Невыполнение этого требования может привести к взаимоблокировке или состоянию гонки. Для решения этой проблемы служебный класс SwingWorker позволяет приложениям выполнять трудоемкие задачи после событий взаимодействия с пользователем в потоке диспетчеризации событий.

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

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

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

Пример

import java.applet.Applet; import java.awt. *; import java.awt.event. *; открытый класс AppletApplication расширяет Applet реализует WindowListener {public static void main (java.lang.String args) {AppletApplication applet = new AppletApplication (); Фрейм w = новый фрейм («Аплет»); w.addWindowListener (апплет); w.add ("Центр", апплет); w.setSize (50, 50); w.setVisible (правда); applet.init (); applet.start (); } public void paint (Графика g) {super.paint (g); g.drawString («Привет, мир», 10, 10); // Верхний левый угол} public void windowClosing (WindowEvent e) {System.exit (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 void windowOpened (WindowEvent e) {}}

Реализация

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

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

См. также

  • Портал компьютерного программирования

Ссылки

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

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

В Викиучебнике есть книга по теме: Java Swings / AWT
Викискладе есть материалы, связанные с AWT .
Последняя правка сделана 2021-06-08 19:46:29
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте