Ответы:
AWT - это интерфейс Java к собственному системному графическому интерфейсу, который присутствует в вашей ОС. Это не будет работать одинаково на всех системах, хотя и пытается.
Swing - это более или менее чистый Java-интерфейс. Он использует AWT для создания окна операционной системы, а затем рисует изображения кнопок, меток, текста, флажков и т. Д. В этом окне и реагирует на все щелчки мышью, нажатия клавиш и т. Д., Решая для себя, что делать. вместо того, чтобы позволить операционной системе справиться с этим. Таким образом, Swing является на 100% портативным и одинаковым для всех платформ (хотя он имеет скины и имеет «подключаемый внешний вид», который может сделать его более или менее похожим на то, как будут выглядеть собственные окна и виджеты).
Это очень разные подходы к GUI-инструментам и имеют множество последствий. Полный ответ на ваш вопрос будет пытаться изучить все эти вопросы. :) Вот пара:
AWT - это кроссплатформенный интерфейс, поэтому, несмотря на то, что для своей функциональности он использует базовую ОС или инструментарий собственного графического интерфейса, он не обеспечивает доступа ко всему, что могут сделать эти инструментарии. Расширенные или более новые виджеты AWT, которые могут существовать на одной платформе, могут не поддерживаться на другой. Функции виджетов, которые не одинаковы на каждой платформе, могут не поддерживаться, или, что еще хуже, они могут работать по-разному на каждой платформе. Раньше люди вкладывали много усилий, чтобы заставить свои приложения AWT работать согласованно на разных платформах - например, они могут пытаться делать вызовы в нативный код из Java.
Поскольку AWT использует родные графические виджеты, ваша ОС знает о них и обрабатывает их размещение друг перед другом и т. Д., Тогда как виджеты Swing представляют собой бессмысленные пиксели в окне с точки зрения вашей ОС. Сам Swing управляет компоновкой и укладкой ваших виджетов. Смешивание AWT и Swing крайне не поддерживается и может привести к смешным результатам, таким как собственные кнопки, которые скрывают все остальное в диалоговом окне, в котором они находятся, потому что все остальное было создано с помощью Swing.
Поскольку Swing пытается сделать все возможное в Java, кроме очень необработанных графических подпрограмм, предоставляемых собственным окном графического интерфейса, это приводило к значительным потерям производительности по сравнению с AWT. Это, к сожалению, сделало Swing медленным, чтобы завоевать популярность. Однако за последние несколько лет это резко сократилось из-за более оптимизированных JVM, более быстрых машин и (я полагаю) оптимизации внутренних компонентов Swing. Сегодня приложение Swing может работать достаточно быстро, чтобы быть работоспособным или даже быстрым, и почти неотличимым от приложения, использующего нативные виджеты. Некоторые скажут, что это заняло слишком много времени, но большинство скажет, что оно того стоит.
Наконец, вы также можете попробовать SWT (GUI-инструментарий, используемый для Eclipse и альтернативу как AWT, так и Swing), который является своего рода возвращением к идее AWT о доступе к нативным виджетам через Java.
Базовое отличие, о котором уже все упоминали, состоит в том, что один - это тяжелый вес, а другой - легкий вес . Позвольте мне объяснить, в основном, что термин «большой вес» означает, что когда вы используете компоненты awt, нативный код, используемый для получения компонента представления, генерируется операционной системой , поэтому внешний вид меняется с ОС на ОС. Где, как в компонентах Swing, JVM несет ответственность за создание представления для компонентов. Еще одно утверждение, которое я видел, заключается в том, что Swing основан на MVC, а AWT - нет.
Свинг против AWT . По сути, AWT появился первым и представляет собой набор тяжелых компонентов пользовательского интерфейса (то есть они являются обертками для объектов операционной системы), тогда как Swing построен на основе AWT с более богатым набором легких компонентов.
Любая серьезная работа с пользовательским интерфейсом Java выполняется в Swing, а не в AWT, который в основном использовался для апплетов.
Когда AWT может быть более полезным, чем Swing -
Это различие между AWT и Swing связано с несколькими последствиями.
AWT - это тонкий слой кода поверх операционной системы, тогда как Swing намного больше. Swing также обладает гораздо более богатой функциональностью. Используя AWT, вы должны реализовать много вещей самостоятельно, в то время как Swing имеет их встроенные. Для работы с интенсивным графическим интерфейсом AWT чувствует себя очень примитивно для работы по сравнению с Swing. Поскольку Swing сам реализует функциональность GUI, а не полагается на хост-ОС, он может предложить более богатую среду на всех платформах, на которых работает Java. AWT более ограничен в предоставлении одинаковой функциональности на всех платформах, потому что не все платформы реализуют одинаковые элементы управления одинаковыми способами.
Компоненты Swing называются «легковесными», потому что им не требуется собственный объект ОС для реализации их функциональных возможностей. JDialog
и JFrame
в тяжелом весе, потому что у них есть сверстники. Таким образом, такие компоненты, как JButton
,
JTextArea
и т. Д., Являются легковесными, потому что они не имеют однорангового узла ОС.
Равный виджет , предоставляемые операционной системой, например, объект кнопки или объект поля ввода.
Качели:
AWT:
AWT 1. AWT занимает больше места в памяти 2. AWT зависит от платформы 3. AWT требуется пакет javax.awt
качели 1. Качели занимают меньше места в памяти 2. Компонент Swing не зависит от платформы. 3. Swing требует пакет javax.swing