FX Experience Has Gone Read-Only

I've been maintaining FX Experience for a really long time now, and I love hearing from people who enjoy my weekly links roundup. One thing I've noticed recently is that maintaining two sites (FX Experience and JonathanGiles.net) takes more time than ideal, and splits the audience up. Therefore, FX Experience will become read-only for new blog posts, but weekly posts will continue to be published on JonathanGiles.net. If you follow @FXExperience on Twitter, I suggest you also follow @JonathanGiles. This is not the end - just a consolidation of my online presence to make my life a little easier!

tl;dr: Follow me on Twitter and check for the latest news on JonathanGiles.net.

JavaFX 1.3 is here!

With the pushing of the bits yesterday, those of us on the JavaFX team are finally able to talk about the work we’ve been doing for nearly the past year (has it been so long?!). A tremendous amount of work from many skilled engineers has gone into making this release the fastest, richest, and most productive release of JavaFX to date. Ok, so we’re somewhat biased :-).

One of the things that has been gratifying about working on this project is that each release of JavaFX gets an order of magnitude better than the last. The compiler team has done amazing work in this release related to both raw performance and also dynamic footprint (the amount of memory used by each JavaFX object). Both the 1.2 release and the 1.3 release bring us a lot closer to the type of performance we know the Java platform is capable of.

Stephen Chin posted a great top ten list yesterday about features that have gone into 1.3. We’ll be posting our own list shortly, which ranks things a little differently but is essentially a lot of the same stuff :-). We’re also going to be posting a lot more detail about these features in the coming weeks.

In addition to all of these new features, we spent a significant chunk of time early on in this release working on “technical debt” we’d acquired prior to and including the 1.2 release. We had been on such a pace that various bits of underlying infrastructure and architecture needed some real TLC. In 1.3 we paid down that debt and are really well placed for future improvements.

A lot has been said in the past about “bindstorms” — a term coined to refer to situations where simple applications with liberal usages of bind would come to a screeching halt. Immediately after 1.2 was released we set to work planning for and making the changes necessary to quell these storms. In a future post we’ll go into detail about how this was done, and what this means to you as a programmer (summary: you pretty much get it for free).

Another area where we paid down technical debt was in the underpinnings of the scenegraph and how it was ported onto different platforms. The TV and desktop implementations of JavaFX share a tremendous amount of code which as an engineer is really great to see. For the most part, the TV team has been able to focus on the deep integration with the system and hasn’t had to worry about the scenegraph implementation at all.

The big compiler rewrite was a huge deal in this release. You can now create thousands and thousands of Nodes in your scenegraphs now without running out of heap or overly stressing the system. The new compiler implementation really puts us in a great spot going forward. There might be a few hiccups with tooling for a couple months but we’re ironing all those bits out as fast as we can.

The other major improvement in this release that really cannot be overstressed is the work that was done with CSS and being able to style all of the controls from CSS. We’ve taken standard CSS and added a couple powerful concepts (which I would love to see HTML CSS adobt back) which really make styling of controls very elegant.

The layout system was another area that got a lot of attention in this release that we are really pleased with. In previous releases there was a tension between container-based layouts and bind-based layouts. In this release, we’ve adjusted a few of the semantics such that the two different layout methodologies share the same basic semantics and behaviors. We’ll definitely be posting more about this as time goes on (I’m sure Amy has something in the works already).

Existing controls such as ListView and TextBox got significant new features. The ListView now has support for custom cells, which are capable of doing just about anything. And its fast. We actually improved the performance of this control by 50% while adding tons of new richness and functionality.

The TextBox can now be configured for either single-line or multi-line text input. It still isn’t rich text (bummer), but for basic text input this Control is now ready for business.

Lots of work went into preview controls (of these the TreeView is one of my favorites), new controls (PasswordBox, ToolTip, ScrollView, Separator, more), and improving existing controls (Slider, ProgressIndicator, more). The Skin implementations for all of the controls were completely rewritten. They are now about 20% of the size of the old skins and all the visuals are now defined in CSS — which means that you the developer or designer have tremendous leverage in giving the controls all new styles.

After all is said and done, the best thing about JavaFX is the programming experience. From the language to the APIs, things fit together well and are a joy to use. We work on this project because we love to build great technology and are committed to making each release better than the last. If you have bugs, feature requests, or optimizations please file issues in our issue tracker.

So what are you waiting for? Download JavaFX today!