Застосування Java Desktop: SWT vs. Swing [закрито]


158

Я в даний час веб-розробник і замислююся над створенням свого першого реального настільного додатку. Ідея полягає у створенні інструменту, який автоматизує дуже повторювані завдання у веб-додатку, де немає API.

Я знаю, що хочу використовувати Java. Раніше я використовував його для веб-матеріалів, знаю синтаксис досить добре і хочу, щоб програма була якомога простішою крос-платформою.

Де я не такий впевнений, чи варто використовувати SWT або Swing. Оскільки моя основна аудиторія використовує Windows, я хочу виглядати там якомога рідніше. Linux і Mac повинні працювати, але зовнішній вигляд тут не так важливий.

Тож які аргументи є за та проти кожного UI Framework, Swing чи SWT?

Дякую.

PS: Я розробляю в Windows за допомогою Eclipse. Але думав про гру з Netbeans.


Важке запитання. :-) Я б пішов з Swing. Але не майте жодного PRO або CON для цього рішення.
Пабло Санта-Крус

дублікат Q. Будь ласка, шукайте Swing vs. SWT Q, про це вже запитували SO. FWIW, я використовую Swing тільки тому, що я навчився саме тому. Є рідні бібліотеки вигляд і відчуття (див. Jgoodies look)
Jason S

"побудувати інструмент, який автоматизує дуже повторювані завдання у веб-додатку" - будь-яка інформація про це? Можливо, існує існуючий інструмент - і я сумніваюся у необхідності програми для настільних ПК для автоматизації цього - він може працювати у вашому випадку прямо зараз - але що робити, якщо ви перейдете до хост-рішення?
Нейт

Вам не потрібно вивчати рамки GUI для настільного додатка. Якщо ви можете використовувати html css та js (які я припускаю, що ви є), ви можете використовувати Electron для створення додатків, що виглядають на власному веб-сайті.
Пранов А.

Електрон був винайдений через кілька років після того, як я задав це питання;) Але ви, звичайно, сьогодні ви праві.
janpio

Відповіді:


152

Плюси гойдалки:

  • частина бібліотеки Java, відсутність необхідності в додаткових рідних бібліотеках
  • працює однаково на всіх платформах
  • Інтегрований редактор графічного інтерфейсу в Netbeans та Eclipse
  • хороші онлайн-уроки від Sun / Oracle
  • Підтримуються офіційні розширення java (наприклад, java OpenGL)

Мінуси гойдалки:

  • Рідний зовнішній вигляд може поводитися інакше, ніж у справжньої рідної системи.
  • важкі компоненти (native / awt) приховують компоненти гойдалки, що не є проблемою більшу частину часу, оскільки використання важких компонентів досить рідкісне

Плюси SWT:

  • , коли це можливо, використовує нативні елементи, тому завжди рідна поведінка
  • підтримується eclipse, gui редактор VEP (VEP також підтримує Swing та AWT)
  • велика кількість прикладів в Інтернеті
  • має інтегрований міст wt / swt, що дозволяє використовувати компоненти wt і swt

Мінуси SWT:

  • потрібні рідні бібліотеки для кожної підтримується системи
  • може не підтримувати будь-яку поведінку у всіх системах через використовувані натурні ресурси (параметри підказки)
  • керування власними ресурсами, в той час як рідні компоненти часто розміщуються з іншими їхніми іншими ресурсами, такими як Шрифти, повинні бути випущені вручну або зареєстровані як користувач, що розпоряджається компонентом для автоматичного виходу.

33
Swing буде ближче до "пишіть один раз, бігайте куди завгодно". SWT буде більше схожий на "писати один раз, налаштувати / перевірити скрізь". Але ця ж дискусія відбулася і з іншими мовами.
Марк

12
Реально "Нативний" вигляд Swing поводиться значно інакше, ніж мій робочий стіл Gnome - в той час, як чомусь теми працюють досить добре, меню виглядає жахливо і майже непридатним.
Хата8

9
Починаючи з Eclipse 3.7, VEP замінили WindowBuilder (який також підтримує і Swing, і SWT).
Олексій Романов

6
Перевагою SWT є також менша витрата пам'яті через вбудовані компоненти. Це повинно бути бажано на машинах з обмеженою різницею пам’яті та пам’яті між swing та swt може бути великим у великих конструкціях GUI.
jantobola

1
@JanTobola Це абсолютно неправильно. Рідні компоненти використовують пам'ять, виділену на рідній купі, а не тільки на купі Java. Я працював над великими графічними інтерфейсами, використовуючи Netbeans Platform, Eclipse RCP, SWT та Swing. Чи були серйозні проблеми щодо пам’яті пам’яті пам’яті в Swing у дуже ранніх версіях Java (коли це була стороння бібліотека, а також від 1,1 до 1,2?) ), але це вже не правда, і розробники повинні випускати багато ресурсів у SWT, є набагато більше можливостей протікання пам'яті з SWT, тоді як нерозділений компонент закінчується "утилізацією" Swing.
gouessej

63

Важливо врахувати, що деякі користувачі та деякі торгові посередники (Dell) встановлюють 64-бітний VM на своїх 64-бітних Windows, і ви не можете використовувати ту саму бібліотеку SWT на 32-бітних та 64-бітних VM.

Це означає, що вам потрібно буде розповсюджувати та тестувати різні пакети, залежно від того, чи є у користувачів 32-розрядна або 64-бітна Java VM. Наприклад, дивіться цю проблему з Azureus, але ви також маєте це з Eclipse, де на сьогоднішній день збірки на передній сторінці завантаження не працюють на 64-бітному VM.


2
Цікавий момент. Як користувач, я все ще вражаю, чому це така велика справа. Але добре, це так, мені доведеться це врахувати. Дякую.
janpio

btw: javaws (webstart) недоступний для 64 IMHO
Karussell

1
@Karussell: Станом на 3/4/2011, 64-розрядний JVM Sun для Windows має підтримку JNLP. Я думаю, що це було правдою деякий час, але я не впевнений, як довго.
Алхімік

23

pro swing:

  • Найбільшою перевагою розгорнутого IMHO є те, що вам не потрібно доставляти бібліотеки із вашим додатком (що дозволяє уникнути десятка МБ (!)).
  • Рідний зовнішній вигляд для гойдалки набагато краще, ніж у перші роки
  • продуктивність порівнянна з swt (розгойдування не повільне!)
  • NetBeans пропонує Matisse як зручний конструктор компонентів.
  • Інтеграція компонентів Swing в JavaFX простіша.

Але в нижньому рядку я б не пропонував використовувати «чистий» гойдалку або swt ;-) Існує декілька рамок застосунку для swing / swt out. Подивіться сюди . Найбільші гравці - netbeans (swing) та eclipse (swt). Ще одним приємним каркасом може бути грифон, а хороший набір компонентів - це шарнір (гойдалка). Грифон дуже цікавий тим, що він об’єднує багато бібліотек і не тільки розгойдується ; також шарнір, swt тощо


1
Так, NetBeans має Matisse як будівельника графічного інтерфейсу, але код справді багатослівний, заплутаний для читання та поруч із неможливим редагуванням за вихідним кодом. Якщо ви дійсно хочете, щоб будівельник GUI пішов із затемненнями WindowBuilder
A.

13

Я б користувався Swing з кількох причин.

  • Це тривало довше, і було докладено більше зусиль для розвитку. Тому, швидше за все, більше функцій у повному обсязі та (можливо) має менше помилок.

  • Існує велика кількість документації та інших вказівок щодо створення заявок.

  • Схоже, зміни Swing поширюються на всі платформи одночасно, тоді як зміни SWT здаються спочатку в Windows, а потім Linux.

Якщо ви хочете створити дуже багатий на додаток додаток, ви можете перевірити RCB NetBeans (Rich Client Platform). Крива навчання є, але ви можете швидко скласти приємні програми, трохи практикуючи. У мене недостатньо досвіду роботи з платформою Eclipse, щоб зробити справедливе рішення.

Якщо ви не хочете використовувати весь RCP, у NetBeans також є багато корисних компонентів, які можна витягнути і використовувати самостійно.

Ще одне слово поради, подивіться на різних менеджерів компонування. Вони довго мене відштовхували, коли я вчився. Деякі з найкращих навіть не знаходяться в стандартній бібліотеці. Інструменти MigLayout (як для Swing, так і для SWT) та JGoodies Forms - це два найкращих на мою думку.



8

Згідно з вашими вимогами, звучить, що в нижньому рядку буде використовувати Swing, оскільки з ним трохи простіше почати роботу і не так тісно інтегруватися в рідну платформу, як SWT.

Swing, як правило, є безпечною ставкою.


6

Цікаве запитання. Я не знаю SWT занадто добре, щоб похвалитися цим (на відміну від Swing та AWT), але ось порівняння, зроблене на SWT / Swing / AWT.

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

І ось сайт, на якому ви можете отримати підручник по принципу будь-що на SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

Сподіваюся, ви прийняли правильне рішення (якщо в кодуванні є правильні рішення) ... :-)


4
Але зауважте, стаття з 2003 року ...
Олексій Романов

4

Якщо ви плануєте створити повнофункціональні програми з більш ніж декількома функціями, я пропоную перейти до використання Eclipse RCP в якості основи.

Якщо ваша заявка не стане надто великою або ваші вимоги просто надто унікальні, щоб обробляти звичайні бізнес-рамки, ви можете сміливо стрибати з Swing.

Наприкінці дня я б запропонував вам спробувати обидві технології, щоб знайти той, який вам краще підійде. Як і Netbeans vs Eclipse проти IntelliJ, тут немає абсолютної правильної відповіді, і обидві рамки мають свої недоліки.

Pro Swing:

  • більше експертів
  • більш схожий на Java (майже немає публічного поля, не потрібно розпоряджатися ресурсом)

Pro SWT:

  • більше рідної ОС
  • швидше

10
Я думаю, що "швидший" пункт є дуже спірним.
Russ Hayward

SWT є громіздким у використанні, мені довелося перевірити свій графічний інтерфейс із кожною версією Windows, деякі помилки відтворювалися лише під Windows Vista. Деякі методи просто не виконуються або викликають AWT під кришкою, що означає, що ви не можете використовувати компактний JRE без AWT та Swing, не ризикуючи зламати SWT. Я почав використовувати SWT у 2009 році, і на мою скромну думку, це не швидше. Раджу надати ретельно розроблений орієнтир.
gouessej

4

Одне, що слід врахувати: Screenreaders

З деяких причин деякі компоненти Swing не працюють добре при використанні програми для читання екранів (і Java AccessBridge для Windows). Знайте, що різні екранізатори призводять до різної поведінки. На мій досвід, SWT-дерево працює набагато краще, ніж дерево Swing у поєднанні з екраністом. Таким чином наш додаток отримав використання як SWT, так і компонентів Swing.

Для розповсюдження та завантаження належної бібліотеки SWT ви можете знайти це посилання корисним: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191


3

SWT був створений як відповідь на млявість Swing на межі століття. Тепер, коли відмінності у продуктивності стають незначними, я думаю, що Swing є кращим варіантом для ваших стандартних програм. SWT / Eclipse має хороший каркас, який допомагає з великим кодом пластини котла.

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