It’s time for another ControlsFX release, this time taking the version number on another jump up the scale and finally settling on version 8.20.7. What this version number represents is the fact that this release requires JavaFX 8u20 and will not work with earlier versions. If you want to use ControlsFX with JavaFX 8.0, you will need to use ControlsFX 8.0.6.
Why the delay?
This release has been brewing since 8.0.6 was released on May 29th – so basically four months. This is not typical for us (we normally have much quicker releases), but Eugene and I were both distracted on a major undertaking – elevating the ControlsFX dialogs API and implementation into the next release of JavaFX itself (it’ll be appearing in JavaFX 8u40, although the API is vastly different than what you see in ControlsFX 8.0.6). The end result is that we iterated through a bunch of API design work (see RT-12643) and none of that benefited ControlsFX, but it took up all our time.
Once JavaFX 8u40 dialogs were API complete (which was only mid-August), we developed a plan for how to proceed with ControlsFX dialogs. In essence we didn’t feel that it was wise to maintain a dialogs API in ControlsFX that was so divergent than what will ship in JavaFX 8u40. Therefore, the plan that we developed was to deprecate the old ControlsFX API, fork the JavaFX dialogs API into a new project called openjfx-dialogs, and to recreate the additional features that ControlsFX includes (but are lacking in JavaFX itself) using the new API (this includes dialogs like progress, font chooser, command link, login, etc). The end result is two-fold:
- ControlsFX 8.20.7 has an external dependency on openjfx-dialogs, but this will only be the case until we baseline on JavaFX 8u40, at which point it can be removed.
- ControlsFX 8.20.7 ships with two dialogs APIs! The saving grace is that the old one is still fully functional but deprecated – hopefully that will give you enough of a hint that the old API will go away in a future release.
The nice thing about openjfx-dialogs is that people wanting to use the new JavaFX dialogs API in 8u20 can do so – just download the jar (or set it as a dependency) and you can use the API (and implementation) exactly as it will be in 8u40. This is great for me – it gives me more testers of the JavaFX dialogs API and implementation – hopefully you can file bugs if you run into them.
What else is new in ControlsFX 8.20.7?
On top of the already mentioned dialog classes, the major new features in ControlsFX 8.20.7 are a new Wizard API (again, built using the new dialog API) and a StatusBar control:
Wizard
The wizard was implemented by Eugene and myself. I think it strikes a really nice balance between simplicity and flexibility, but I am sure that over time we will continue to tweak the API as we get more user feedback. The thing I like most about the API is its simplicity. In the common use cases, you can simply specify the pages you want to show, and that’s it. Once the dialog is closed by the user (or in fact, at any time), you can query a Map to retrieve the input that the user has put into all fields of the wizard. The Wizard knows how to extract values from most commonly used controls, and if it can’t, you can easily add support for custom value extractors. On top of this, the wizard supports linear and conditionally branching page flows. Here’s a screenshot from our simple test wizard:
StatusBar
The status bar control was contributed by Dirk Lemmermann. It is normally placed at the bottom of a window. It is used to display various types of application status information. This can be a text message, the progress of a task, or any other kind of status (e.g. red / green / yellow lights). By default the status bar contains a label for displaying plain text and a progress bar for long running tasks. Additional controls / nodes can be placed on the left and right sides.
The picture below shows the default appearance of the StatusBar control:
The following picture shows the status bar reporting progress of a task:
Miscellaneous Improvements
Of course, on top of the major new features / changes, there is a bucket load of small improvements, including the following:
- Improved glyph font support, including support for the latest FontAwesome release.
- Improved build system – we now have just one gradle project that can work with ControlsFX, ControlsFX-samples, and FX Sampler.
- Action and Dialogs API refinement, based on our work moving dialogs up to JavaFX 8u40.
- New CSS tab in FX Sampler – now FX Sampler can not only syntax highlight the code of a sample, it can also syntax highlight the CSS of the control.
- The validation API now supports regular expressions and predicates.
- Improved internationalisation support – we are fully integrated with Transifex, and the community is always welcome to help translate.
- Big performance improvements in SpreadsheetView.
- Support for any span in SpreadsheetView fixed row/columns
- RangeSlider is now a lot less finicky about setting min / max / high / low values.
- Lots of bug fixes, particularly in Dialogs, Actions, SpreadsheetView, as well as the Check* controls (CheckListView / CheckTreeView / CheckComboBox).
That’s all for this release – we hope you appreciate all the hard work that the team is putting in to ControlsFX, and that you might consider offering bug fixes or bug reports. If you want to get involved, check out our documentation that describes everything that you need to know to get started.
Is there any news on when/if lightweight dialogs are going to be incorporated into JavFX itself or ControlsFX? Seems like significant moves are afoot to get JavaFX applications on Android/iOS so lightweight dialogs would be a very useful feature for the future?
There are no plans currently to do any further work with regards to lightweight dialogs. They really require a proper glasspane API to be fully feasible and so far this does not exist.
Hello
Is there any examples of wizards? I love this release !
Yes – look in controlsfx-samples for sample code on how to use wizards.
There are samples but not how to use them
cmd gives me “no main manifest attribute, in controlsfx-samples-8.20.7.jar” when i write java -jar controlsfx-samples-8.20.7.jar
@Egor: try
java -cp controlsfx-8.20.7.jar;control
sfx-samples-8.20.7.jar;fxsampler-1.0.8.jar fxsampler.FXSampler
@ControlsFX team: Can you please update the website or the JAR manifest?
You may try this:
java -cp controlsfx-samples-8.20.7.jar;controlsfx-8.20.7.jar;fxsampler-1.0.8.jar;. fxsampler.FXSampler
Hi! I want change icon image. How do it? (see here: http://a.disquscdn.com/uploads/mediaembed/images/1266/1017/original.jpg )
Please file a feature request at http://issues.controlsfx.org – thanks!
Would it be possible to extend the CheckBoxTreeView control to allow it to take RadioButtonTreeItems? Use case is something like: Check boxes for parents and radio buttons for children. Scenario: user can can choose whether they want to include feature X or not (check box), and if they do, they must select an option: a, b, or c (radio buttons).
Possibly – you should file a feature request over at http://issues.controlsfx.org and we can discuss it further there.
The Dialogs seem not to work with jdk 8_u25. I got following exception: “ControlsFX 8.20.7 requires at least Java 8u20.” In Bitbucket I can see that this bug is solved. Is there anywhere a beta version I can download?
Yes, download a snapshot of 8.20.8 from http://snapshots.controlsfx.org
Hi,
Is there any way to change the text of the buttons (the YES, NO, CANCEL…) or to take the default buttons from the OS if it is in another language (i need the buttons to be in spanish).
Thats ok, I’ve already found how to.
Sorry, but you really have a licensing issue introduced here. If controlsfx depends on openjfx-dialogs and therefor makes the application depend on it you have a conflict:
openjfx-dialogs is GPL. So controlsfx and all applications and libraries depending on it have to be GPL, too. This is a rapid licensing switch and inacceptable in the most cases.
You should at least define this dependency as optional. But even this is not allowed by the GPL as I read this license.
openjfx-dialogs is GPL+classpath exception. IANAL, but the classpath exception allows for linking to the openjfx-dialogs module without the need for taking its license. There should be no issue here.
Hi Jonathan
As you’ve seen I have written a blog post about the new JavaFX Dialogs that are included in the JDK 8u40: http://code.makery.ch/blog/javafx-dialogs-official/
I get quite a few questions about how they should be used. I try to answer them as best as I can but I think it would be valuable to have you input on some of the questions. It might also provide some hints about rough edges of the API.
Maybe you can have a look at the comments from time to time.