Чим відрізняється Swing від AWT?


Відповіді:


235

AWT - це інтерфейс Java до рідного системного коду GUI, присутній у вашій ОС. Він не працюватиме однаково у кожній системі, хоча намагається.

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

Це дуже різні підходи до наборів інструментів GUI і мають чимало наслідків. Повна відповідь на ваше запитання спробує вивчити все це. :) Ось пара:

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

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

Оскільки Swing намагається зробити все можливе на Java, окрім дуже необроблених графічних процедур, що надаються рідним вікном графічного інтерфейсу, він раніше несе певну ефективність у порівнянні з AWT. Це змусило Swing, на жаль, повільно наздогнати. Однак це різко скоротилося за останні кілька років завдяки більш оптимізованим JVM, більш швидким машинам та (я припускаю) оптимізації внутрішніх пристроїв Swing. Сьогодні додаток Swing може працювати досить швидко, щоб бути справними або навіть блискавками, і майже не відрізнятись від програми за допомогою рідних віджетів. Деякі кажуть, що для того, щоб дійти до цього пункту, зайняло дуже багато часу, але більшість кажуть, що воно того варте того.

Нарешті, ви також можете перевірити SWT (інструментарій GUI, що використовується для Eclipse, і альтернатива як AWT, так і Swing), що дещо повертається до ідеї AWT про доступ до рідних віджетів через Java.


Гм ... зробивши досить обширний розмах на декількох платформах, я можу вам сказати, що він дуже не однаковий на всіх платформах. Подібні? Звичайно. Те саме? У жодному разі.
клент

1
Проблеми з важкою / легкою вагою зникнуть з оновленням Java 6 (див. Java.dzone.com/news/a-farewell-heavyweightweightlightwei ).
Дан Дайер

Ого. Я не можу повірити, що вони можуть це виправити, і я все ще не можу повірити, що змішування легких та важких компонентів було б колись бажаним. Але неймовірно, що вони можуть це виправити.
skiphoppy

Просто забудьте про обидва. Погляньте на WPF. :)
Альпер Озцетін

3
Ось офіційна стаття на Java, яка підтверджує, що змішування виправлено: oracle.com/technetwork/articles/java/…
user193130

35

Базова різниця, про яку вже всі згадували, полягає в тому, що один важить велику вагу, а інший - легку вагу . Поясню, в основному, що означає термін "велика вага", це те, що, коли ви використовуєте компоненти awt, власний код, який використовується для отримання компонента перегляду , генерується операційною системою , ось чому його зовнішній вигляд змінюється з ОС на ОС. Якщо як у swing компонентів, то відповідальність JVM генерує представлення для компонентів. Ще одне твердження, яке я бачив, - це те, що гойдалка базується на MVC, а awt - ні.


14
насправді Swing використовує модель-делегатський підхід, який походить від підходу MVC, де в View і Controller об'єднані для структури Delegate
Purushottam

15

Гойдалки проти AWT . В основному AWT вийшов першим і являє собою набір важких компонентів інтерфейсу користувача (це означає, що вони обгортки для об'єктів операційної системи), тоді як Swing, побудований поверх AWT з більш багатим набором легких компонентів.

Будь-яка серйозна робота в інтерфейсі Java виконується в Swing не AWT, який в основному використовувався для аплетів.


1
чи є випадки, коли awt корисніше / радимо використовувати, то гойдалки?
Самікша

1
Це було актуально ... 10 років тому.
барт

@Pacerier він говорив про AWT, а не SWT

11

Наскільки коли AWT може бути корисніше Swing -

  • ви можете націлювати на старіший JVM або платформу, яка не підтримує Swing. Це колись справді почало грати, якщо ви будували аплети - ви хотіли націлити на найменший загальний знаменник, щоб людям не довелося встановлювати новіший плагін Java. Я не впевнений, що являє собою поточна найбільш широко встановлена ​​версія плагіна Java - це може бути сьогодні інакше.
  • деякі люди віддають перевагу рідному вигляду AWT над шкурами платформи Swing 'не зовсім там'. (Є кращі сторонні шкури натурного вигляду, ніж впровадження Swing BTW) Багато людей вважали за краще використовувати FileDialog AWT над FileChooser Swing, оскільки це дало діалог файлів платформи, більшість людей використовувалося, а не "дивне" користувацьке Swing.

2
Але для останнього, ми можемо також створити FileChooser , що досить багато виглядає як діалогові вікна файлів (але без автозаповнення) stackoverflow.com/q/17630055/2534090
JavaTechnical

9

Кілька наслідків є наслідком цієї різниці між AWT та Swing.

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

Компоненти гойдалки називаються "легкими", оскільки їм не потрібен власний об'єкт ОС для реалізації своїх функціональних можливостей. JDialogі JFrameмають важку вагу, тому що вони мають однолітків. Таким чином, такі компоненти, як JButtonі JTextAreaт. Д., Мають легку вагу, оскільки вони не мають однорангових операційних систем.

Рівний віджет , що надаються операційною системою, наприклад, об'єкт кнопки або об'єкт поля введення.


7

Гойдалка:

  1. Гойдалка є частиною занять фундаментом java.
  2. Компоненти гойдалок не залежать від платформи.
  3. Компоненти гойдалок - це легкі компоненти, тому що гойдалки сидять на вершині віт.

AWT:

  1. AWT називається абстрактним інструментом вікна.
  2. Компоненти AWT залежать від платформи.
  3. Компоненти AWT - це важкі компоненти.

5
  • Компонент swing забезпечує набагато гнучкіший користувальницький інтерфейс, оскільки він слідкує за контролером перегляду моделі (mvc).
  • awt не базується на mvc.
  • гойдалка працює швидше.
  • АВТ працює не швидше.
  • Компоненти гойдалки мають невелику вагу.
  • компоненти компонентів мають велику вагу.
  • гойдалка займає менше місця в пам'яті.
  • awt займає більше місця в пам'яті.
  • Компонент swing не залежить від платформи.
  • awt залежить від платформи.
  • гойдалки вимагають javax.swing пакет.
  • awt вимагають javax.awt пакет.

10
Я не думаю, що свінг працює швидше, ніж AWT, оскільки AWT використовує нативний код (код gui), який вже був там в ОС, але swing будує кожен компонент з нуля. Тож AWT може бути швидшим. Не могли б ви сказати мені, яка ваша точка зору, кажучи, що свінг працює швидше ? Дякую.
JavaTechNI

3

AWT 1. AWT займає більше місця в пам'яті 2. AWT залежить від платформи 3. AWT вимагають пакет javax.awt

гойдалки 1. Гойдалка займає менше місця в пам'яті 2. Swing компонент - незалежний від платформи 3. Гойдалки вимагають javax.swing пакет


1
Скажіть, як AWT займає більше місця в пам'яті? Тому що він використовує нативний код?
JavaTechNI

awt вимагає java.awt. *
abhisekp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.