Вопрос

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

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

Это было полезно?

Решение

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 (набор инструментов с графическим интерфейсом, используемый для Eclipse и альтернативу AWT и Swing), который является своего рода возвратом к идее AWT о доступе к собственным виджетам через Java.

Другие советы

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

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

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

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

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

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

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

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

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

Качать:

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

АВТ:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top