JFXtras 0.6 Final Releasedsteveonjava | April 5, 2010
I am pleased to announce the 0.6 release of the open-source JFXtras project, the largest 3rd party library of JavaFX add-ons. This release is a very large undertaking that represents the work of several dozen contributors over the past 6 months.
JFXtras 0.6 will work with any JavaFX release in the 1.2 family. We recommend using the very latest release (currently JavaFX 1.2.3), which can be downloaded from JavaFX.com.
Starting immediately, we will be focusing on developing a JavaFX 1.3 compatible JFXtras release. Our plan is to release a 1.3 compatible version of JFXtras within 1 week of the official release announcement from Oracle. To hear about future JFXtras release announcements, make sure to follow my blog.
To make it easier to see some of the JFXtras capabilities in action, I have included Web Start demos from our component test library. It may take a minute or two to load the first demo, but after that the rest should launch instantaneously.
The JFXtras controls include a Table, Tree, Shelf, Calendar, PasswordBox, Picker, Spinner, MultiLineTextBox, ScoreBoard, and Menu. Many of these controls can be driven off a dynamic data provider that gives back incremental results from an asynchronous operation, such as a Web Service call.
XTableView (browse demo source)
XShelfView (browse demo source)
XPicker (browse demo source)
The JFXtras layouts include the XGrid, XMigLayout, and Resizable versions of Stack, HBox, and VBox. All of these layouts support dynamic animation and a powerful defaults system. The JFXtras XGrid has been contributed back to Oracle and will be included in the JavaFX 1.3 release.
XGrid (browse demo source)
Wipe transitions including: blind, fade-out, fade-reveal, fade, fade-zoom, flip-180, reveal, shape, slide-over, slide, and swing-in as featured in Simon Morris’ JavaFX in Action book.
Wide Demo (browse demo source)
JFXtras includes a wide selection of skinnable shapes including: Almond, Arrow, Asterisk, Astroid, Balloon, Cross, Donut, ETriangle, Gear, ITriangle, Lauburu, RTriangle, Rays, RegularPolygon, ResizableEllipse, ResizableRectangle, ReuleauxTriangle, RoundPin, Sphere, and Star.
Shapes Demo (browse demo source)
We also have a large set of skinnable borders including: bevel, ellipse, empty, etched, frame, image, line, metallic, pipe, raised, rounded, shape, soft, and titled.
Borders Demo (browse demo source)
And a Whole Lot More
Here are some of the other features JFXtras has to offer:
- XStore Data Storage – Simple persistence of JavaFX primitives and sequences with defaults, auto-save, and save-on-exit.
- Asynchronous JavaFX Support (for experts only) – Allows invocation of JavaFX code off the EDT either via a SwingWorker-style callback or a set of closure-driven primitives.
- Swing Integration – Via the original SceneToJComponent wrapper or the new, easier to use, JXScene class.
- Custom Cursors and Paints – Allows you to use custom cursors and custom paints within your JavaFX application via a special Toolkit as featured in Jeff Friesen’s articles.
- Interpolatable and HSB Gradients – Ever wanted to animate a color? This is the perfect solution, complete with support for an HSB color palette.
- Bindable XMap – A simplified map syntax for use with JavaFX that includes bind support on gets.
- Image Caching – An image caching library that supports high performance, asynchronous loading and sizing of images from URLs.
The full API is documented online here:
We also have a new documentation wiki on the JFXtras website. Please browse it for ideas on how to use the JFXtras components and feel free to comment or contribute back to the docs to make them better:
Migrating from Previous Releases
In order to avoid name collisions with the built-in JavaFX classes, we have undergone a fairly aggressive renaming strategy on all scene graph classes. If you have been using an earlier version of JFXtras, you will have to rename your usages by pre-pending an X before the class name. Going forward this will reduce the likelihood of collisions with JavaFX built-in classes and make it easier to visually inspect code that uses a mix of JavaFX and JFXtras classes.
Some other migration changes that you need to take into account include:
- The fill layout constraint has been changed from an enumeration to two booleans (hfill, vfill).
- The Grid border feature has been replaced with a general purpose margin on XLayoutInfo
- The Deck class has been renamed to XStack
- All the layout classes starting with Resizable* have changed to X* (when in doubt try the JavaFX class name prepended with an X)
There is also a matching release of JFXtras Test so you can do behavior-driven development with a declarative JavaFX syntax. We use this for all the unit tests in JFXtras and encourage you to do the same on your projects. Some of the new JFXtras Test features include:
- Asynchronous Testing Support – Test background processes such as HttpRequests
- JUnit Integration – Integrate JFXtras Test in your Ant or Maven build using a standard JUnit runner
Download it and give it at try!
Some of the folks I would like to thank for making this release possible include:
- Jim Weaver for inspiring me to start this project and being a great mentor.
- Keith Combs for assisting me on various bits and putting up with my perfectionism on everything.
- Jim Clarke for being the most productive JavaFX coder at Oracle who is not on the core team.
- Dean Iverson for bringing MigLayout to JFXtras and being the clean code guru (see his article on code conventions).
- David Armitage for contributing some great controls and making sure our documentation was top notch.
- Tom Eugelink for being our voice of sanity on the mailing list and being polite about my past mistakes in misattributing his work.
- Pedro Duque Vieira for making the world a safer place for Swing developers with JXScene.
- John Freeman for contributing a very high quality JTable wrapper that I always underpromote.
- And also: Peter Pilgrim, Christophe DUFOUR, Joshua Marinacci, Simon Morris, Andres Almiray, Jeff Friesen, Andrew Hughes, and Liu Huasong.