Какую среду Java GUI выбрать?

Какую инфраструктуру / библиотеку GUI вы бы выбрали, если бы вы начали свой новый проект сейчас или в ближайшем будущем?

Он должен быть бесплатным для коммерческого использования и кроссплатформенным.

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

Есть также SWT, но, похоже, у него проблемы с Linux.

Какая у вас библиотека / фреймворк Gui?

РЕДАКТИРОВАТЬ: Sun отменил проект swingx. Судя по комментариям на форуме http://swingx.dev.java.net/, большинство ресурсов Sun, которые ранее работали над основной версией, сейчас полностью работают над JavaFx.

3 ответа

Решение

Я думаю, что, несмотря на неумелое руководство Sun, Swing по-прежнему является отличной основой. Вы можете многое с этим сделать, особенно если эта "партия" включает в себя пользовательские элементы управления пользовательского интерфейса. Если вашему приложению нужен фирменный LAF или даже несколько сложных пользовательских элементов управления здесь и там, Swing - именно то, что вам нужно.

С другой стороны, мне очень нравится SWT. Он получает плохой рэп, потому что все раньше думали, что это уловка IBM, чтобы овладеть Java, но на самом деле это просто еще одна инфраструктура пользовательского интерфейса, которая весьма дополняет Swing. Я бы не советовал использовать SWT для сверхсложного рендеринга графики (в частности, для композитинга) или для создания действительно нетривиальных пользовательских элементов управления, но для всего остального это действительно модно. Сам API подвергается большой критике из-за таких вещей, как использование битовых масок и управляемый пользователем цикл отправки событий, но большинство этих вещей становится достаточно прозрачным, как только вы к ним привыкнете. Сами компоненты намного проще, чем Swing (с точки зрения расширяемости и тому подобное), что означает, что API может быть пропорционально проще. Я действительно могу вспомнить, как создать и заполнить таблицу в SWT; тогда как я не думаю, что когда-либо справлялся с этим в Swing без помощи Google.

Самая большая проблема SWT на данный момент заключается в том, что стабильная версия зависит от Carbon в Mac OS X. Это означает, что приложения SWT могут работать только 32-битной на Java 5 (или 32-битной на SoyLatte). Что касается других платформ, SWT является феноменальным в Windows (Vista и XP) и почти так же хорош в GTK Linux. У меня (в недавнем прошлом) не было проблем с SWT в Linux, поэтому я немного удивлен, что вы упомянули об этом как о больном месте.

Возвращаясь к вашему вопросу: все зависит от того, что нужно вашему приложению. Если это нестандартное приложение с множеством пользовательских элементов управления и сложными композициями, то Swing - единственная игра в городе. Однако, если для вас важнее более простой API или если ваши пользователи требуют предельной верности платформы LAF, лучшим выбором будет SWT.

Прямо сейчас я использую SWT или Qt (Jambi).

Swing не развивался последние, скажем, 10 лет, ошибки не исправлены, разработка остановилась в пользу JavaFX, поэтому вы никогда не увидите никаких новых функций. JavaFX, вероятно, будет выглядеть великолепно, но все еще не работает, и он сделан людьми, которые позволяют Swing голодать до смерти, поэтому я не буду вкладывать в это деньги.

Между SWT и Qt я предпочитаю использовать Qt, потому что это очень зрелая и мощная среда, созданная людьми, которые знают, что они делают (ну, в большинстве случаев, в любом случае:)), и SWT, если лицензия на новый проект не была совместим с Qt.

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

Другие вопросы по тегам