> Ultimately I will have to package the application with an installer, which might come with its own java runtime
Use the new self-contained packaging features of JavaSE:
https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html
You can trigger these features using Maven/Gradle/Ant scripts, just google JavaFX
Maven Plugin/JavaFX Gradle Plugin.
The packaging features are not JavaFX specific, so it can work for Swing/SWT apps as well, though, in general, for new apps I'd recommend JavaFX development over using the other toolkits (unless you need to base the app on the NetBeans or Eclipse platforms).
> Another concern is it considered to be a "enterprise client" app meaning able to be connect to EJB and stuff? If so Swing may be a better choice for better integration.
I don't think it makes any difference really. I doubt it is going to be easier to connect to back end services using Swing vs JavaFX vs SWT. It will probably be a pretty equal amount of work for each.
I wouldn't recommend connecting directly to EJBs or using the old JEE remote EJB client libraries (e.g. not this:
http://www.mastertheboss.com/jboss-server/jboss-as-7/jboss-as-7-remote-ejb-client-tutorial).
Instead use Rest/Akka/WebSockets - something like that.
> The standalone app will need to connect to a couple of DBs, show tables, Is JavaFX still a good choice for this scenario?
Yes JavaFX is still a good pick for this IMO. JavaFX does not have built-in DB connectivity (neither do other Java UI toolkits like Swing/SWT).
There are some things out there which may assist you in your connectivity (for instance
http://www.javafxdata.org). But get prepared to do some work yourself.
Here is a really basic JavaFX/JDBC connectivity sample (
https://gist.github.com/jewelsea/4955598), though if you are doing a lot of database work, you are probably better doing it with JPA and a traditional Spring/JEE server and communicating with that over the network from your JavaFX client.
JavaFX has a TableView component
https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/table-view.htm which has a lot of functionality. Just don't expect it to have all the functionality of an Excel spreadsheet or a Microsoft Access Database backed table widget.
If you require that more advanced database backed spreadsheet style of stuff, you might want to look for an existing Swing component you could embed using a JavaFX Swing Node, or something like TiwulFX might be able to help:
http://tiwulfx.panemu.com. But in all, none of these Java UI toolkits are quite like the old Delphi/MS Access/PowerBuilder systems which helped you to build certain kinds of applications in a RAD environment. For instance, you won't be able to create this in six lines of code:
http://www.infoworld.com/article/2631597/development-tools/new-sybase-powerbuilder-12-requires-little-coding.html. Be prepared to write some code, possibly a lot of it and it is going to take time and skill.
> and most likely some graphs. Is JavaFX still a good choice for this scenario?
Yes JavaFX is still a good pick for this IMO. JavaFX has a built-in graphing library.
http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/charts.htm
The built-in JavaFX charts look great and are very easy to use for basic charting purposes.
The charts include the ability to listen to changes on observable data sources and animate visual chart changes based upon that.
The charts are also fully stylable via CSS (just like everything else in JavaFX):
If you require full scientific charts, you could use a JavaFX => Java2D bridge (which is actually simple and painless) + JFreeChart/OrsonCharts
http://java.dzone.com/announcements/fxgraphics2d-bridge-java2d
Though I'd tend to stick with the built-in JavaFX charts rather than using a bridge if the functionality in the standard JavaFX charts is enough.
Also note that JavaFX comes with WebView which can render charts from HTML, so you can use HTML based charting libraries as well if you need to:
https://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/
There are some great HTML based libraries out there, like fusion charts and high charts:
http://www.fusioncharts.com
http://www.highcharts.com
WebView can of course be used for displaying any kind of web content, so you can a develop a hybrid HTML/Java client app if you wanted. Though I think if you tried to do a lot of communication over the Java/JavaScript bridge, things would get pretty intertwined and painful quite quickly.