Відповіді:
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.
Базова різниця, про яку вже всі згадували, полягає в тому, що один важить велику вагу, а інший - легку вагу . Поясню, в основному, що означає термін "велика вага", це те, що, коли ви використовуєте компоненти awt, власний код, який використовується для отримання компонента перегляду , генерується операційною системою , ось чому його зовнішній вигляд змінюється з ОС на ОС. Якщо як у swing компонентів, то відповідальність JVM генерує представлення для компонентів. Ще одне твердження, яке я бачив, - це те, що гойдалка базується на MVC, а awt - ні.
Гойдалки проти AWT . В основному AWT вийшов першим і являє собою набір важких компонентів інтерфейсу користувача (це означає, що вони обгортки для об'єктів операційної системи), тоді як Swing, побудований поверх AWT з більш багатим набором легких компонентів.
Будь-яка серйозна робота в інтерфейсі Java виконується в Swing не AWT, який в основному використовувався для аплетів.
Наскільки коли AWT може бути корисніше Swing -
Кілька наслідків є наслідком цієї різниці між AWT та Swing.
AWT - це тонкий шар коду вгорі ОС, тоді як Swing набагато більший. Swing також має набагато багатший функціонал. Використовуючи AWT, вам доведеться реалізувати багато речей самостійно, тоді як Swing має їх вбудований. Для роботи з інтенсивним графічним інтерфейсом AWT відчуває себе дуже примітивно, ніж працювати з Swing. Оскільки Swing реалізує функціональність GUI сам, а не покладається на хост ОС, він може запропонувати більш сприятливе середовище на всіх платформах, на яких працює Java. AWT більш обмежений у постачанні однакових функціональних можливостей на всіх платформах, оскільки не всі платформи реалізують однакові на вигляд елементи управління однаковими способами.
Компоненти гойдалки називаються "легкими", оскільки їм не потрібен власний об'єкт ОС для реалізації своїх функціональних можливостей. JDialog
і JFrame
мають важку вагу, тому що вони мають однолітків. Таким чином, такі компоненти, як JButton
і
JTextArea
т. Д., Мають легку вагу, оскільки вони не мають однорангових операційних систем.
Рівний віджет , що надаються операційною системою, наприклад, об'єкт кнопки або об'єкт поля введення.
Гойдалка:
AWT:
AWT 1. AWT займає більше місця в пам'яті 2. AWT залежить від платформи 3. AWT вимагають пакет javax.awt
гойдалки 1. Гойдалка займає менше місця в пам'яті 2. Swing компонент - незалежний від платформи 3. Гойдалки вимагають javax.swing пакет