So, initially I was considering a whole run on guiding established OOP programmers to binding and property oriented material; but honestly, I’m not feeling qualified for that just yet. I’m still learning a lot myself. There have been a few major changes in the software community lately, and many of these changes run directly against long held design patterns. The majority of these, for me, have been implemented in my quest to learn JavaFX, which Oracle has announced will be replacing Swing in the near future.
Honestly, I can understand why. It’s lightning fast, completely compatible with a number of other JVM-based languages (such as Scala and Jython), uses the graphics hardware to its full potential (with one exception that I’ll discuss momentarily), and can be coded extremely quickly. It uses bindings and properties in a manner that makes even the old and tested design of Java Beans look amateurish. Additionally, the long-held notion that programming objects must, in some manner, be visualizable as literal objects, has rightly been taken into question. A property-oriented object is more like a gear; what it does is an inherent and inseparable part of what it is.
This will be a chronicle of my adventures and experiments with JavaFX. For a decent read on modern JavaFX, I recommend “Pro JavaFX 2: A Definitive Guide to Rich Clients with Java Technology“, published by Apress. It’s just getting your feet wet, not teaching you to swim; but it’s a magnificent start.
Where GUIs are concerned, I come from two universes, that of Swing and that of OpenGL. JavaFX is a fusion between the two, implemented as a raw API. It cuts straight from JVM virtual machine code to the GPU. Whether that’s an nVidia Quadro K6000 or a 2008-era Intel Graphics Chipset, that is a significant amount of red tape cut. The only caveat is that on some architectures, a few features have not yet been implemented. It’s not a lack of planning or concern that has done this, but a lack of available man-hours; the situation will resolve itself. But, as an example, the amazing Perspective 3D mode, on Linux, is only available for nVidia GPUs with the proprietary driver; otherwise, the Java2D pipeline is defaulted to instead. So, if you have an amazing Radeon GPU in your machine, you will have to wait for that particular feature to be implemented. (Or, join up and implement it yourself, if you have the time and the know-how.) Thankfully, the era of wondering about GPU compatibility seems to be coming to a close with the imminently released JavaFX 8.0.
There are a thousand very good basic tutorials on the web alone; this is my focus on the issues that I have run into with the bindings of JavaFX, and how to get around them. I look forward to seeing the absolutely beautiful GUIs that people will construct with this technology.