Over the years I developed a bunch of programs for people who requested software for me. However, during the development of these projects a series of interesting components and libraries evolved as part of these projects. In order to modularize and reuse parts of these projects I split them into a collection of packages that I distribute via Maven Central.
Generic Wizard ⎘
JavaFX is a great way for creating GUIs with Java. Nevertheless, still it lacks predefined ways for creating a wizard like user interaction. Furthermore all the user examples and tutorials I found on forums and other websites describe solutions which are bound to their specific application and how the content of the wizard is connected in their special case. I could not find any solution that is flexible and yet powerful enough to provide an easy to use infrastructure for creating wizards.
- Abstraction from the actual content of the wizard
- History of visited wizard pages
- Branching sequences of wizard pages
- Constraints on the validity the input of wizard pages
- Dynamic creation of additional wizard pages based on the currently entered user input
- Static type safety over the results of any wizard page
- Embeddable into other surfaces of the application
- CSS styling support
Explanation required for usage
A wizard is a collection of wizard pages with the following properties.
- Unique name
- Wizard pages reference each other by their unique name.
- Finish flag
- Marks whether a page is a final page that potentially enables the
Calculates the name of page to show when clicking on the
nextbutton.INFO! During the calculation of the name the function may dynamically create a new wizard page, attach it to the wizard and return its name.
- Generates any desired Java object that stores whatever data the page represents. This might be user input, a selection in a list, checkboxes, any kind of user interface you designed.
Determines whether the current page should enable the
nextbutton and in case it is a final page the
finishbutton as well. The result may depend on the current input, the state of a certain checkbox , etc.