В чем разница между Swing и AWT?


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

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

8 200

8 ответов:

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

Swing-это более или менее чистый графический интерфейс Java. Он использует AWT для создания окна операционной системы, а затем рисует изображения кнопок, ярлыков, текста, флажков и т. д., в это окно и реагирует на все ваши щелчки мыши, ключевые записи и т. д., решив для себя, что делать, вместо того, чтобы позволить операционной системе обрабатывать его. Таким образом качели составляет 100% портативный и одинаковый на разных платформах (хотя он доступен для скинов и имеет "подключаемый внешний вид", который может сделать его более или менее похожим на то, как будут выглядеть собственные окна и виджеты).

Это совершенно разные подходы к GUI toolkits и имеют много последствий. Полный ответ на ваш вопрос будет пытаться изучить все те. :) Вот пара:

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

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

потому что Swing пытается сделать все возможное в Java, кроме очень сырых графических процедур, предоставляемых собственным окном GUI, он использовал, чтобы понести довольно высокую производительность по сравнению с AWT. Это сделало качели, к сожалению, медленно. Однако за последние несколько лет это резко сократилось из-за более оптимизированных JVM, более быстрых машин и (я полагаю) оптимизации внутренних компонентов Swing. Сегодня приложение Swing может работать достаточно быстро, чтобы быть исправным или даже zippy, и почти неотличимы от приложения, использующего собственные виджеты. Некоторые скажут, что это заняло слишком много времени, чтобы добраться до этого момента, но большинство скажет, что это того стоит.

наконец, вы также можете проверить SWT (инструментарий GUI, используемый для Eclipse, и альтернатива как AWT, так и Swing), что является своего рода возвращением к идее AWT доступа к собственным виджетам через Java.

основное различие, о котором уже все упоминали, заключается в том, что один из них тяжелый вес и легкий вес. Позвольте мне объяснить, в основном, что означает термин heavy weight, когда вы используете компоненты awt, собственный код используется для получения компонента view генерируется операционной системой, вот почему это внешний вид меняется от ОС к ОС. где, как в компонентах Swing своей ответственности JVM для создания представления для компонентов. еще одно утверждение, которое я видел, это swing основан на MVC, а awt-нет.

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

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

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

  • вы можете быть нацелены на более старую JVM или платформу, которая не поддерживает Swing. Это действительно вступало в игру, если вы строили апплеты - вы хотели нацелиться на самый низкий общий знаменатель, чтобы людям не пришлось устанавливать более новый плагин Java. Я не уверен, что текущая наиболее широко установленная версия плагина Java - это может быть по-другому сегодня.
  • некоторые люди предпочитают родной взгляд из AWT над качели 'не совсем там' платформы скинов. (Есть лучшие 3rd party native looking skins, чем реализации Swing BTW) многие люди предпочитали использовать FileDialog AWT над FileChooser Swing, потому что он дал диалоговое окно файла платформы, к которому большинство людей привыкли, а не "странный" пользовательский Swing.

несколько последствий вытекают из этой разницы между AWT и Swing.

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

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

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

качели:

  1. Swing является частью классов Java foundation.
  2. компоненты Swing являются независимыми от платформы.
  3. компоненты Swing являются облегченными компонентами, потому что качели находится на вершине авт.

AWT:

  1. AWT называется абстрактным инструментом окна.
  2. компоненты AWT зависят от платформы.
  3. компоненты AWT тяжеловесны комплектующие.
  • компонент качания обеспечивает очень гибкий пользовательский интерфейс потому что он следуйте за контроллером вида модели (mvc).
  • awt не основан на mvc.
  • качели работает быстрее.
  • awt не работает быстрее.
  • компоненты Swing имеют малый вес.
  • компоненты awt имеют большой вес.
  • swing занимает меньше места в памяти.
  • awt занимает больше места в памяти.
  • компонент качания платформа независимый.
  • awt зависит от платформы.
  • качели требуют javax.качели пакет.
  • awt требует javax.пакет awt.

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

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