I am extremely pleased today to announce the availability of release candidate for version 5.0 of Substance look-and-feel. The roadmap for this release has been published in April, and the library has undergone significant internal and external changes to address major performance issues and to ensure the long-term code health of the project.
The release notes for version 5.0 provide detailed information on the major application-facing changes in this version. Some of the applications that have used Substance-specific APIs and client properties or defined a custom skin will have to be modified when upgrading to version 5.0. This was absolutely mandatory to address the performance issues and ensure that the library stays maintainable in the long run. The code has grown a lot of unnecessary complications over the last few releases and had to be significantly refactored to bring it back to a clean and maintainable state.
Here is the list of big changes in Substance 5.0:
- Moving to Java 6 as the minimum runtime requirement.
- Addressing the performance issues. While the first announced drop was 20% faster than release 4.3, the release candidate is 3.5 times faster on static scenarios and 2.7 times faster on dynamic scenarios as measured by the LightBeam testbed.
- New client property to allow using per-window skins.
- Enhanced theming layer.
- Removed 16 VM flags and left only 2.
- Removed 15 client properties, consolidated 3 others into 2 and added 1 new.
- Removed 54 API methods on the main class, pushing some functionality into the theming layer.
- Consolidated theme pack, watermark pack and button shaper pack into the Extras pack that also provides additional skins.
Click on the button below to launch a signed WebStart application that shows the available Substance features.

The following sub-projects are also available as release candidates:
As promised, version 4.3 (the last version that can run on Java 5) is in long-term support mode. At the present moment this version has thirteen bug fixes backported to it from the main development trunk.
You are more than welcome to take Substance 5.0RC for a ride and report any problems in the project mailing lists, forums or issue tracker. The final release is scheduled for September 15. Only bugs will be fixed until that date.
Sample screenshots of Substance in action:






Here are some Swing links that you might have missed during the last week:
- Jacek Furmankiewicz writes about release 0.2 of SwingBuilder project that allows declarative UI binding via a YAML file. The project aims to address many of Swing’s pain points, such as verbosity, event listeners, layout management, data binding, background long running tasks, internationalization and more.
- Looks like the Eclipse Albireo project that promised easy embedding of Swing components in SWT applications is losing some steam. According to Gordon Hirsch‘s post on the dev mailing list, both active developers (Gordon himself and Bruno Haible) are being reassigned a th their jobs, making it problematic to devote much time to bringing Albireo to beta and release status. With no community participation in development, looks like the project is heading towards stagnation.
- Geertjan Wielenga overviews four of the available Java desktop frameworks (missing a couple of others in the process), giving some general advice on choosing the right framework for your project. A sound collection of tips which can be extended to pretty much any other programming field.
- Geertjan is playing with the Swing Explorer project (by Maxim Zakharenkov) and explores its NetBeans integration. A noteable feature is jumping from the painting stack trace back into the NB source editor for the matching method.
- Jasper Potts continues his series on customizing Nimbus appearance. He has posted a useful program that lists all Nimbus-specific UIManager entries, along with the graphics representation of the matching values (painters, borders, insets, colors, fonts). It gives a great visual overview of the entries that can be customized, even if a few rows show weird visuals (such as RadioButtonMenuItem[Disabled+Selected].checkIconPainter).
- Christopher Deckers has announced release 0.9.6 of DJ Native Swing project that aims to bring native components, such as web browser, Flash player, video player or HTML editor into Swing applications. This release provides better integration logic with foreign native components.
- Having problems skinning custom Swing components under the Swing system look-and-feel? SWT 3.5 might have an answer for you. One of the items for SWT 3.5 is to “provide an API to draw operating system themed controls and parts of controls”. As i have shown with native text rasterization, you don’t need to wait for Swing to provide the missing functionality (although it is most certainly nice when they do so).
- And finally, Christophe Le Besnerais has the second part of his quest to create a modern-looking UI application in Swing, talking about breadcrumb bar, glowing icons and custom-shaped frames.
Here are some Swing links that you might have missed during the last three weeks:
- Gregg Bolinger extends the application-wide hotkeys with a lookup dialog, complete with wiring the events for navigating and canceling.
- Roman Kennke summarizes the Caciocavallo project that aimed to create portable GUI backends for OpenJDK graphics stack.
- Santhosh Kumar has an interesting solution for cross-LAF combobox with group separators. The solution involves putting the grouping logic inside the renderer, and one of the commenters wonders whether this logic should be part of the model or of the specific view.
- Piet Blok writes about the JXLayer project and his experiments with multiple layers and sharing UI instances.
- Alexander Potochkin has assumed the role of specification lead for reference implementation of JSR 295 (Swing Application Framework). He shares his thoughts, outlining the proposed changes and soliciting feedback on his blog, and has already submitted a few changes to the project source repository.
- Native font rasterization is one of the major features added to JDK 6u10 on Windows platforms, and has impressed Naiden Gochev that has screenshots of old rasterizer, SWT (native) rasterizer and NetBeans running under the new rasterizer. Too bad that the Windows look-and-feel only uses Segoe UI on the menus…
- Jasper Potts sums up the work he and Richard Bair have been doing on Nimbus look-and-feel. Perhaps the more disappointing part is that the highly-anticipated designer tool announced last September still can’t be made available to the public. The followup post has an example of skinning a slider under Nimbus. If you plan on customizing Nimbus with painters, note that the com.sun.java.swing.Painter interface is only available in JDK 6u10, so you might as well instantiate Nimbus with the fully qualified class name instead of iterating over available LAFs and querying their names.
- On the Synth-related note, Xavier Young has started a series of tutorials on configuring the EaSynth look-and-feel. The first part is on general button customization, and the second part is on arrow buttons, check boxes, radio buttons and toggle buttons.
- Yves Zoundi has announced release 0.0.3 of VFSJFileChooser component that extends the JFileChooser to browse remote file repositories such as FTP, SFTP, WEBDAV and more.
- Andres Almiray writes about Groovy new binding features, their applicability to SwingBuilder and the comparison with JavaFX binding.
- Christophe Le Besnerais continues his explorations on modern interfaces, aiming to recreate the look similar to that of OnWired web site in Swing.
- Michael Bar-Sinai proposes solutions for complex table cell rendering logic in his java.net article. In particular, he has a class-based and rule-based approaches for separating same-column rendering logic into more manageable code.
- Finally, Maxim Zakharenkov has released version 1.3 of SwingExplorer project. New in this release – NetBeans plugin and tracing component addition.
The goal of Flamingo project is to provide a small and cohesive set of powerful UI components with functionality similar to or superseding that of Vista Explorer and Office 2007. Command bar is one of the more complicated UI components in the Office 2007, and Flamingo’s JRibbon is the all-Java implementation of this component. It is already being used by a number of projects which provide valuable feedback on the missing parts and help in prioritizing their development. Recently, i have added two user-requested features to the JRibbon – modifying the contents of in-ribbon galleries and support for contextual tabs.
The documentation of JRibbon has been updated to bring it in-sync with the latest 3.1dev branch. If you’re new to this component, start with the overview and then delve into the specifics of each one of the ribbon’s building blocks.
To read more on modifying the contents of in-ribbon galleries scroll down to the “Dynamically changing gallery content” section in the ribbon bands page. To read about contextual task group, first read the page on creating a task group and then read the “Working with contextual task groups” section of the ribbon creation page.
Here is a screenshot of a ribbon with selected contextual tab. Note the vertical lines that separate the tasks in the two contextual groups. Also note the different background colorization of the task toggle tab and the top portion of the ribbon – this is done to provide visual indication that the currently selected task is a contextual one.

This marks the last new features for the version 3.1 of Flamingo. You’re more than welcome to download the latest 3.1dev drop and try it in your applications. The release candidate for Flamingo 3.1 is scheduled on September 1 with the final release scheduled on September 15. Click on the button below to launch a demo of JRibbon component in action (requires Java 6).
