Technically I'm on vacation this week so don't mention this post to my boss. I simply couldn't wait to blog about cool stuff we put into JavaFX 1.2. Shhhhh!
Lots of JavaFX related things were announced at JavaOne, many of them concerning future products and other bits that aren't released yet. This post won't cover any of those. There were so many things discussed at JavaOne that I'm afraid some of the key points of the new JavaFX might have been missed. In this post I'm only going to cover the things that you can actually download and work with today. I'm talking only about the new version of JavaFX, previously codenamed Marina, and now called JavaFX 1.2. Without further ado, here is my personal list of the most important features.
Support for JavaFX under Linux and Solaris has been a long time coming. It's always been in our continuous build system and we really wanted to ship it with the 1.0 release, but too many things were broken. Finally, after much hard work, we have a beta release. Our goal is to make Solaris and Linux equal platforms with Windows and Mac in the JavaFX world. JavaFX is about having one Java across all of the screens (Desktop/Mobile/TV) as well as all of the OSes (Mac/Win/Linux/Solaris). This is one more step towards that goal.
Some features still don't work, which is why we are calling it a beta release, but it's a good starting point. We are now using GStreamer for the video support, which was one of the key features previously missing. You will get some graphics hardware acceleration depending on your distro and configuration. Shaped windows do not work yet. This is due to a bug in the underlying JRE. The graphics guys say they have a fix which will be rolled out into Java 6 and OpenJDK soon, so you won't have to wait until the next release of JavaFX for cool rounded windows.
JavaFX has had great graphics but at the 1.0 release had only a single native UI control,
TextBox. It's kinda hard to make a real business oriented application using only text controls. That's all changed now. JavaFX 1.2 has real UI controls, designed for the 21st century. We looked at everything we always loved and hated about Swing, and considered long term UI toolkit trends. Then we build a new control and layout API that addresses the kinds of applications people need to build today. Here's just a taste of what's in the new controls:
Along with the controls is a new layout system that addresses the biggest problems with the AWT layouts. It is now super easy to mix layout with animation, and to create custom layouts using only a few lines of code. With controls we can build real business applications that run across multiple screens.
There are a few controls missing from the current list. In particular you will notice the absence of Table and Tree. It's not that we don't have plans for them. There simply wasn't enough time and we didn't want to hold back the release. Rest assured they are coming.
Along with controls the most important feature for building business applications is charts. Charts are such a common request that we built them into JavaFX. All of the standard chart types are there, including pie, scatter, and bar charts. They are very easy to use and customize. You can also create your own chart types using a few lines of code. Here's a few examples.
Previously you could work with data only by dropping down to Java code. This would be fine except for the fact that mobile Java code is different than desktop Java code. In addition, every form of Java has it's own special API for persisting data. To fix this problem we've added new support to JavaFX common profile to hide these kinds of platform differences and let you get back to coding great apps. Here's a quick list of the new stuff:
javafx.io.Storagefor persisting data locally on any client platform
javafx.data.feed.*built in support for RSS and Atom data feeds
Propertiesas JavaFX classes
javafx.async.*base classes for all asynchronous operations in JavaFX, including a clean way to implement Java based tasks
Our goal is for every updated to JavaFX to be faster, and I think we definitely hit that goal. Across the board you will find JavaFX 1.2 to be faster than 1.1 and 1.0. In terms of startup time, memory usage, and graphics performance we have improved every part of the JavaFX user experience. For certain tasks you will see as much as a 3x improvement over the previous release.
To achieve this speed improvement we revisited almost every part of the platform. The compiler switched from using true multiple inheritance to mixins. This eliminates most of the nasty corner cases that gave multiple inheritance a bad name while providing what developers want 90% of the time. As a side benefit the underlying compiled bytecode is smaller and faster.
The graphics team did a lot of work redesigning the scenegraph to handle updates to the scene more intelligently. The result is fewer repaints and a more responsive user interface.
There were also bug fixes across the board to the video & audio stack and the underlying graphics pipeline. In addition, we put a lot of work into JavaSE 6 update 14 to reduce startup time and improve webstart performance. Over all you will find JavaFX 1.2 to be faster and smoother than the previous releases.
The five features I listed above are just a small part of the many improvements in JavaFX 1.2. What's most important is this is part of a larger plan to have regular smaller releases of the JavaFX platform rather than the huge 2+ year release cycles of the JRE. Faster and smaller releases ensure that we ship high quality software to you faster, and lets us better incorporate your feedback. If there is any feature you feel is missing please send us a note or file a bug at javafx-jira.kenai.com.
Back to vacation for the week and then time to dive into the next release. Please let us know how you like JavaFX 1.2 and what you are are building with it.