JavaFX started in 2005 as a graphics-rich scripting language known as F3 (Form Follows Function), which was created by Chris Oliver. Sun decided it was worth taking from a promising prototype into a product. I worked on the Java Swing client team at the time, and we were tasked with taking the cool ideas of F3 and the experience we had in building client libraries used by millions of developers and forming a new toolkit. We unveiled the first version of that at the JavaOne 2007 conference with the new name JavaFX. It was a big project to create a new language and scene graph graphics library and it formed into something really cool. We were initially targeting multiple platforms, desktop applications, smart TVs, mobile and embedded systems.
In early 2010 I started a new skunkworks group as lead, and we set out to compete with Apple and Android and create a complete phone application stack. This was an amazing opportunity to design a phone from scratch. From designing the application architecture and API for what constitutes an application and how it interacts with the OS through to designing all the standard set of applications. Like email, browser, clock, notes, news etc.
After Oracle bought Sun there was a change of direction away from JavaFX being a new language and complete stack. This change involved porting JavaFX platform from the JavaFX Script language over to Java and redesigning the APIs to feel natural to Java developers. I moved back to the platform team as one of the Architects, focusing on all the parts of the platform that sat on top of the scene graph like UI controls.
There are a couple of areas where I innovated, and we built something ahead of our time. One was with how to make themes for the user interface components. I decided on CSS and we started with the then alpha, CSS 3 spec from W3C. We then extended it with support for variables, inheritance and some special color functions. The cleverest was called “derive” which would take a base color and create a color between 0 being black, 50% being the base color and 100% being white. This made it so we could create complex styling with gradients in the UI control themes all based on a single color. At runtime you could then just change the base color and all of the UI would be restyled around that new color, making it very easy to create colored buttons etc. I spent months deep in color theory to get this right as simple mathematical 20% lighter on yellow and blue would give you completely different effects. As the human eye is more sensitive to contrast changes in some colors compared to others.
Another one of those was when my colleague Richard Bair and I invented a novel algorithm for how to layout a list of items. Up until we solved it you could either have a list with fixed row height and large dynamic number of items. Or you could have a list with variable row heights. Apple had solved it for one special case which was the contact list in address book where you could have row headers for the start of each letter. As far as I know no one had solved it for a generic case.
Over the last 15 years the web has caught up on some of those features but not all.
I designed two complete themes for JavaFX, the big challenge was to create a generic theme that could be used in all kinds of applications, look modern for many years and look in-keeping on all the main operating systems. I am pleased that even now 10yrs later they still look decent.
We went on to create a next generation high performance client platform for Java. Designed to run on Desktop and Embedded. With the aim of scaling to the large enterprise, data heavy engineering products where Java Swing has been strong, and the web could not handle. Part of the move over to Java was a move to being an Open-Source project which became Open JFX. We built mobile and tablet ports of the platform for Android and iOS which were eventually released into the Open JFX project.
I was very proud of some of the external products that were built on top of the platform we created. Some of my favorites are:
- The European central Air Traffic Control system.
- Control systems for the train networks of 3 countries.
- The bridge UI for the US Navy’s next generation battle ships
- Flight control and simulator for NASA
- The UI for Volkswagen group cars, VW, Audi etc.
- Several stock and commodity trading platforms.
JavaFX is still being developed today by the Open Source community and being used by companies all over the world to create applications.