В чем разница между Swing и AWT? - PullRequest
211 голосов
/ 03 января 2009

Может кто-нибудь объяснить, в чем разница между Swing и AWT?

Существуют ли случаи, когда AWT более полезно / рекомендуется использовать, чем свинг или наоборот?

Ответы [ 8 ]

226 голосов
/ 03 января 2009

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.

33 голосов
/ 03 января 2009

Базовая разница, о которой уже все упоминали, состоит в том, что один тяжелый вес , а другой легкий вес . Позвольте мне объяснить, в основном, что термин «большой вес» означает, что когда вы используете компоненты awt, собственный код, используемый для получения компонента представления , генерируется операционной системой , поэтому он выглядит и чувствует изменяет с ОС на ОС. Где, как в компонентах Swing, JVM несет ответственность за генерацию представления для компонентов. Другое утверждение, которое я видел, заключается в том, что Swing основана на MVC а тт нет.

14 голосов
/ 03 января 2009

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

Любая серьезная работа с пользовательским интерфейсом Java выполняется в Swing, а не в AWT, который в основном использовался для апплетов.

11 голосов
/ 07 июля 2009

Насколько AWT может быть более полезным, чем Swing -

  • Возможно, вы нацелены на более старую JVM или платформу, которая не поддерживает Swing. Раньше это действительно входило в игру, если вы строили апплеты - вы хотели нацелить наименьший общий знаменатель, чтобы людям не пришлось устанавливать более новый плагин Java. Я не уверен, какая текущая наиболее широко установленная версия плагина Java - это может отличаться сегодня.
  • некоторые люди предпочитают нативный внешний вид AWT, а не скины платформы Swing. (Существуют более качественные сторонние скины, чем у Swing). Многие люди предпочли использовать FileDialog от AWT вместо FileChooser от Swing, потому что он давал диалог с файлами платформы, к которому привыкли большинство людей, а не «странный» пользовательский Swing.
9 голосов
/ 29 мая 2013

Это различие между AWT и Swing обусловлено несколькими последствиями.

AWT - это тонкий слой кода поверх ОС, тогда как Swing намного больше. Swing также обладает гораздо более богатой функциональностью. Используя AWT, вы должны реализовать много вещей самостоятельно, в то время как Swing имеет их встроенные. Работа с интенсивным графическим интерфейсом, AWT чувствует себя очень примитивно работать по сравнению с Swing. Поскольку Swing сам реализует функциональность GUI, а не полагается на хост-ОС, она может предложить более богатую среду на всех платформах, на которых работает Java. AWT более ограничен в предоставлении одинаковых функций на всех платформах потому что не все платформы реализуют одинаковые элементы управления в одном и том же пути.

Компоненты Swing называются «легкими», потому что они не требуют родной объект ОС для реализации их функциональности. JDialog и JFrame являются тяжеловес, потому что у них есть сверстники. Итак, такие компоненты, как JButton, JTextArea и т. Д. Являются легковесными, поскольку не имеют однорангового узла ОС.

A peer - это виджет, предоставляемый операционной системой, такой как объект кнопки или поле ввода.

7 голосов
/ 21 февраля 2013

Swing:

  1. Swing является частью базовых классов Java.
  2. Компоненты Swing не зависят от платформы.
  3. Компоненты Swing - это легкие компоненты, потому что качели расположены на верхней части AWT.

AWT:

  1. AWT называется инструментом абстрактного окна.
  2. Компоненты AWT зависят от платформы.
  3. Компоненты AWT являются тяжелыми.
5 голосов
/ 31 января 2013
  • компонент качания обеспечивает гораздо гибкий пользовательский интерфейс, потому что он следовать модели контроллера вида (MVC).
  • AWT не основан на MVC.
  • качели работают быстрее.
  • AWT не работает быстрее.
  • легкие компоненты качания.
  • Компоненты AWT имеют большой вес.
  • Свинг занимает меньше места в памяти.
  • AWT занимает больше места в памяти.
  • компонент качания не зависит от платформы.
  • AWT зависит от платформы.
  • качели требуют пакет javax.swing.
  • требуется пакет javax.awt.
3 голосов
/ 11 апреля 2013

AWT 1 AWT занимает больше места в памяти 2 AWT зависит от платформы 3 AWT требуется пакет javax.awt

качели 1 Swing занимает меньше места в памяти 2 Компонент Swing не зависит от платформы 3 Swing требует пакет javax.swing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...