Я думаю, что ответ Стаале - хорошее начало, но я бы добавил ...
Используйте JavaFX, если
1) Если вы заинтересованы в разработке приложения для мобильных устройств или ТВ (обратите внимание, что оно еще не выпущено)
2) Если вы работаете с графическим дизайнером, который создает внешний вид приложения в фотошопе, и хотите иметь возможность напрямую импортировать его внешний вид.
3) Если для вас важно сделать GUI грязным. (поэтому, если вы хотите, чтобы панель постепенно исчезала или сдвигалась по требованию)
Используйте Swing, если
1) Вы создаете приложение в основном для рабочего стола.
2) Производительность имеет значение, и вы знаете, что делаете (поэтому, если вы пишете IDE, Swing будет лучшим выбором)
3) Вы ищете RPC (платформу с расширенным набором клиентов) для построения.