Настольное приложение Java: SWT по сравнению с [закрытым] Swing

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

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

То, где я не так уверен, - то, если я должен использовать SWT или Swing. Поскольку моя основная аудитория использует Windows, я хочу посмотреть он максимально собственный там. Linux и Mac должны работать, но взгляды не так важны здесь.

Таким образом, каковы аргументы в пользу и против каждой Платформы UI, Swing или SWT?

Спасибо.

PS: Я разрабатываю в Windows с помощью Eclipse. Но думал об игре с Netbeans.

156
задан janpio 21 February 2010 в 14:39
поделиться

8 ответов

Плюсы Swing:

  • часть библиотеки Java, нет необходимости в дополнительных собственных библиотеках
  • работает одинаково на всех платформах
  • Встроенный редактор графического интерфейса в Netbeans и Eclipse
  • хорошо в Интернете учебные материалы от Sun / Oracle
  • Поддерживаются официальными расширениями Java (например, Java OpenGL)

Минусы Swing:

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

Плюсы SWT:

  • использует собственные элементы, когда это возможно, поэтому всегда собственное поведение
  • поддерживается eclipse, графический редактор VEP (VEP также поддерживает Swing и AWT)
  • большое количество примеров в Интернете
  • имеет интегрированный мост awt / swt, позволяющий использовать компоненты awt и swt

Минусы SWT:

  • требует собственных библиотек для каждой поддерживаемой системы
  • , может не поддерживать каждое поведение во всех системах из-за использования собственных ресурсов (параметры подсказки)
  • , управляющих собственными ресурсами, в то время как собственные компоненты будут часто удаляются вместе с их родительскими ресурсами, другие ресурсы, такие как шрифты, должны быть освобождены вручную или зарегистрированы как получатель удаления для компонента для автоматического выпуска.
151
ответ дан 23 November 2019 в 21:51
поделиться

Важно учитывать, что некоторые пользователи и некоторые торговые посредники (Dell) устанавливают 64-битную виртуальную машину на свои 64-битные Windows, и вы не можете использовать ту же самую SWT-библиотеку на 32-битные и 64-битные виртуальные машины.

Это означает, что вам нужно будет распространять и тестировать различные пакеты в зависимости от того, есть ли у пользователей 32-разрядная или 64-разрядная виртуальная машина Java. См. эту проблему , например, с Azureus, но у вас также есть она с Eclipse, где на сегодняшний день сборки на главной странице загрузки не запускаются на 64-битной виртуальной машине.

63
ответ дан 23 November 2019 в 21:51
поделиться

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

Swing обычно является безопасной ставкой.

8
ответ дан 23 November 2019 в 21:51
поделиться

Я бы использовал Swing по нескольким причинам.

  • Он существует дольше, и к нему было приложено больше усилий при разработке . Следовательно, вероятно, что функция завершена и (возможно) содержит меньше ошибок.

  • Существует множество документации и других руководств по созданию эффективных приложений.

  • Кажется, что изменения в Swing распространяются на все платформы одновременно, в то время как изменения в SWT появляются сначала в Windows, а затем в Linux.

Если вы хотите создать очень многофункциональное приложение, вы можете попробовать NetBeans RCP (Rich Client Platform). Есть кривая обучения, но вы можете быстро собрать хорошие приложения, немного попрактиковавшись. У меня недостаточно опыта работы с платформой Eclipse, чтобы сделать верное суждение.

Если вы не хотите использовать весь RCP, NetBeans также имеет множество полезных компонентов, которые можно извлечь и использовать независимо.

Еще один совет: изучите разные менеджеры по расположению. Они надолго сбили меня с толку, когда я учился. Некоторых из лучших нет даже в стандартной библиотеке. На мой взгляд, инструменты MigLayout (для Swing и SWT) и JGoodies Forms являются двумя из лучших.

13
ответ дан 23 November 2019 в 21:51
поделиться

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

Если ваше приложение не станет слишком большим или ваши требования слишком уникальны, чтобы их можно было обрабатывать в обычной бизнес-структуре, вы можете смело переходить с Swing.

В конце концов, я предлагаю вам попробовать обе технологии, чтобы найти ту, которая вам больше подходит. Как и Netbeans против Eclipse против IntelliJ, здесь нет абсолютно правильного ответа, и обе структуры имеют свои недостатки.

Pro Swing:

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

Pro SWT:

  • больше родной ОС
  • быстрее
4
ответ дан 23 November 2019 в 21:51
поделиться

pro swing:

  • Самым большим преимуществом Swing ИМХО является то, что вам не нужно поставлять библиотеки вместе с приложением (что позволяет избежать десятков МБ (!)).
  • Стандартный внешний вид намного лучше для Swing, чем в первые годы
  • производительность сопоставима с SWT (Swing не медленный!)
  • NetBeans предлагает Matisse как удобный конструктор компонентов.
  • Интеграция компонентов Swing в JavaFX проще.

Но в конце я бы не стал предлагать использовать «чистый» Swing или SWT; -) Существует несколько прикладных фреймворков для swing / swt out. Посмотрите здесь . Крупнейшие игроки - это netbeans (качели) и eclipse (swt). Еще один хороший фреймворк может быть griffon, а хороший «набор компонентов» - pivot (качели). Griffon очень интересен, потому что он объединяет множество библиотек и не только качели ; также pivot, swt и т. д.

23
ответ дан 23 November 2019 в 21:51
поделиться

Интересный вопрос. Я не слишком хорошо знаю 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 )

Надеюсь, вы примете правильное решение (если правильные решения в кодировке) ...: -)

6
ответ дан 23 November 2019 в 21:51
поделиться

Короче говоря, нет; если вы не хотите излишне удвоить время разработки.

-121--2128166-

Попробуйте отменить ссылку на человека и событие при удалении:

    public bool UnregisterFromEvent(Person person, Event entry)
    {
        var registrationEntry = this.session
            .CreateCriteria<PersonEventRegistration>()
            .Add(Restrictions.Eq("Person", person))
            .Add(Restrictions.Eq("Event", entry))
            .Add(Restrictions.Eq("IsComplete", false))
            .UniqueResult<PersonEventRegistration>();

        bool result = false;
        if (null != registrationEntry)
        {
            using (ITransaction tx = this.session.BeginTransaction())
            {
                registrationEntry.Person = null;
                registrationEntry.Event = null;
                this.session.Delete(registrationEntry);
                tx.Commit();
                result = true;
            }
        }
        return result;
    }

Кроме того, я не знал, что можно добавить ограничение на объект, я бы написал это с помощью псевдонимов и идентификаторов.

            .Add(Restrictions.Eq("Person", person))
            .Add(Restrictions.Eq("Event", entry))
-121--4461210-

Я бы выбрал качель только потому, что он «родной» для java.

Плюс посмотрите на http://swingx.java.net/ .

10
ответ дан 23 November 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: