I am incredibly pleased to announce on behalf of the entire ControlsFX team that ControlsFX 8.0.3 is now ready for download! This release comes approximately two months after the 8.0.2 release, and is a major release. For those too impatient to read the details, go here to download the release (or as always it is also available via Maven Central – just update your dependencies to 8.0.3). For those unfamiliar with the features of ControlsFX, refer to the features page. With that out of the way, let’s get into the juicy details of this release! :-)

Firstly, it goes without saying that this release was a team effort, including input from the following people: Eugene Ryzhikov, Samir Hadzic, Henri Biestro, Dirk Lemmermann, Tomas Mikula, ‘Badisi’, Jean-Fran├žois Henrard, and Danno Ferrin. It is due to these fine folks hard work that we have this release today!

Secondly, the reason why this release is two months in the making rather than the usual one month cycle is that we decided to improve the ControlsFX sampler program. It is now more generic (it is a totally separate application now), and because of this we are able to support other third party JavaFX projects. What this means is that other projects (such as JFXtras, for example) can now use the FXSampler app to demonstrate their own features, which saves them from having to write their own sample app. The ControlsFX team is more than happy to help other third party projects to make use of the FXSampler framework, just reach out to us in our Google groups. As of now the JFXtras team is already in the process of porting their samples to use this new framework.

For those interested in seeing what FXSampler looks like, it isn’t much different than what we had previously, but here is a sample screenshot anyway (click for the slightly bigger version):

The FXSampler application (click for full-sized version)

The FXSampler application (click for full-sized version)

I wouldn’t call this the worlds most fascinating UI, but it is clean and out of the way, leaving users to appreciate the features being sampled rather than getting lost in the UI. Of course, we’re always happy to improve it if there are any feature requests.

Now, I guess we should really switch over to covering the new UI controls, huh? Here they are:

CheckComboBox / CheckListView / CheckTreeView
There are three new controls that all offer the same functionality – support for checking zero or more items in a ComboBox, ListView, or a TreeView, and being able to easily retrieve the checked items from an underlying ‘check model’. These were already easily doable using standard JavaFX APIs, but this takes it a step further by automatically tracking the checkbox selections for you. Here’s a screenshot of each of the new controls:

CheckComboBox, CheckListView, and CheckTreeView

CheckComboBox, CheckListView, and CheckTreeView


PopOver
The PopOver control is designed to provide information to users in a visually pleasing way that does not interfere with their workflow. It is hard to explain, but hopefully the screenshot below better summarises the functionality:

A PopOver with no content.

A PopOver with no content.

Of course, a PopOver with no content is a little sad, so here’s a screenshot of one with content inside it. Note that this is using a custom TitledPane stylesheet that we will hopefully include in ControlsFX 8.0.4:

A PopOver with content.

A PopOver with content.


SpreadsheetView Improvements
The SpreadsheetView continues to see improvements. These include:

  • Support for a date editor (see screenshot below).
  • Support for hiding column headers (row headers have always been hidable).
  • Support for specifying variable row heights.
  • Improved performance (due to better column virtualisation).
  • The API has been cleaned up further and revised.

Here’s a screenshot of the SpreadsheetView control in ControlsFX 8.0.3:

SpreadsheetView with a DatePicker showing.

SpreadsheetView with a DatePicker showing.


Borders
The Borders API is a simple (and still relatively exploratory) API that allows you to easily wrap panes or nodes with a border, in a similar fashion to the Swing BorderFactory API. Here’s a some code, and then a screenshot of what that code results in:

Node wrappedButton = Borders.wrap(button)
    .lineBorder().color(Color.RED).build()
    .lineBorder().color(Color.GREEN).build()
    .build();
A single button with two borders.

A single button with two borders.


That’s it! If you’ve read this far, you probably should now jump over to the ControlsFX page to download this release. If you want to see other features of older ControlsFX releases, you can do that too!