Ответ 1
Вы не найдете объективного ответа на этот вопрос, только личные предпочтения и варианты.
SWT
Мое личное предпочтение - SWT. Я начал использовать его, когда Swing был плохим вариантом. SWT является "просто" слоем поверх собственных API окон, и, таким образом, приложения, написанные с помощью SWT, выглядят как написанные пользователем приложения. Они также могут быть испорчены. Никакой API никогда не будет защищен от плохих разработчиков. Производительность так же быстро, как может быть в моем опыте. Если это не так, есть другой способ его реализации, где он будет.
SWT API очень низкий уровень, который делает внедрение базового материала неожиданно утомительным, но, к счастью, наиболее типичные способы его решения могут быть решены с помощью JFace, что улучшает ситуацию. И когда вы используете API некоторое время, вы накапливаете свои собственные классы использования. Вы можете стать довольно быстрыми в реализации инструментов SWT.
Поскольку SWT дает вам только основы, вам нужно MigLayout и Nebula, чтобы выжить. Вам может понравиться Glazed Lists.
Qt Jambi
На самом деле, я бы хотел включить еще один вариант, кроме SWT и Swing для вас: Qt Jambi. Но Nokia отказалась от этого, и теперь он "поддерживается сообществом с открытым исходным кодом". Поэтому я не знаю, что "не устаревает через несколько лет".
Тем не менее, меня волнует эта текущая дискуссия . Некоторые люди написали реализацию SWT с использованием Qt Jambi в качестве "родного" API. Они пытаются понять, как внести свой вклад. Наличие Qt в качестве опции может включить вашу "единую библиотеку, которая работает на всех платформах" для SWT в один прекрасный день, хотя я не буду рассчитывать на нее в ближайшее время.
Но для меня ваше требование "единой библиотеки" не является такой большой проблемой. Используйте maven для своих сборок, добавьте несколько строк конфигурации, и вы забудете об этом очень скоро.
Качели
Я не могу сравнить SWT с Swing, так как мой опыт с Swing ограничен. В качестве пользователя мне не нравятся большинство приложений Swing, но я видел несколько красивых.
В наши дни внешний вид приложений Swing стал довольно хорошим, но вы не обманешь себя. Кроме того, производительность кажется действительно хорошей в новых и хорошо сделанных Swing-приложениях, но опять же, это только из моего ограниченного представления как пользователя.
Очевидно, что для Swing больше сторонних расширений, чем для SWT - просто выполните поиск Google. (Но опять же, если вы терпите боль от обучения Eclipse RCP, вы получите огромную, интересную инфраструктуру. Это не говорит о виджетах, но, например, EMF или RAP. Я не человек Eclipse RCP - у меня никогда не хватило терпения для этого...)
Действительно большим преимуществом для Swing, если вам нравится этот материал, является Matisse, графический дизайнер Netbeans. Кстати, Qt также хорошо сделал GUI-конструктор.
Резюме
Если вы планируете длительный срок, я не вижу больше вариантов, чем SWT или Swing для разработки графического интерфейса в Java. Оба они достаточно хороши, чтобы удовлетворить большинство потребностей, если вы проводите достаточно времени. Но они не идеальны. Вы всегда будете завидовать людям, использующим другие языки для своих виджетов, скорости внедрения, инструментария... Если вы не привязаны к Java, вы можете даже предпочесть Flash или Qt.