After writing about the project vision and posting a few teaser screenshots, it’s finally time for the first source and binary drops of Flamingo component suite version 3.0 code-named Deirdre. Over the next few entries I will write more about each one of the components, how it fits into the project vision, how it is implemented and how you can use it in your application. Right now i will just give a brief overview of the components; if you’re interested in the code or the test applications, you can find those in the Documents & Files section and the CVS repository.
- The
org.jvnet.flamingo.bcb contains the base class for the breadcrumb bar components, while the org.jvnet.flamingo.bcb.core contains pre-packaged core implementations that allow navigating local file system, wrap an existing tree model and navigate a remote SVN repository.
- The
org.jvnet.flamingo.common contains most of the common components:
AbstractCommandButton and its extensions, JCommandButton and JToggleCommandButton provide powerful extensions to the core JButton and JToggleButton classes, adding optional popup action area (split buttons) and automatic resizability with adaptive layout.
JCommandButtonPanel is a host panel for AbstractCommandButtons with adaptive layout, groupings and optional single selection mode. It can be used to provide functionality similar to Windows Explorer or Leopard Control Panel.
AbstractFileViewPanel is an extension of JCommandButtonPanel with support for progress tracking and canceling, backed up by a SwingWorker. Sample usage is illustrated in test.imageviewer.Viewer that implements a simple image viewer (also shows an example of local file breadcrumb bar and resizable icons).
JPopupPanel is the base class that allows showing any Component in a popup window, with support for multiple (cascading) rich popup panels in the PopupPanelManager class . The JIconPopupPanel allows wrapping a JCommandButtonPanel in a popup with configurable scrolling and maximum width.
- The
org.jvnet.flamingo.common.icon contains the classes for resizable icons. The base interface is ResizableIcon, extending the core Icon interface and adding a number of methods for resizability support. Other classes in this package provide utility implementations (such as ImageWrapperResizableIcon that creates a resizable icon from a specified image).
- The
org.jvnet.flamingo.ribbon contains the implementation of Office 2007 ribbon component. It reuses the vast majority of other Flamingo components such as JCommandButton, JToggleCommandButton, JPopupPanel, JIconPopupPanel and ResizableIcon.
- The
org.jvnet.flamingo.svg contains classes that allow showing an SVG image as a ResizableIcon and to transcode SVG image to the matching Java2D code. The implementation is backed by the Apache Batik library.
For more information you can either wait for the next few entries or dive right into the code at the project site. Note that while most of the API and the implementation is stable, some of the functionality is either missing or will be refactored. If you have any questions, post them at project forums or mailing lists.
Here are some Swing links that you might have missed during this week:
- Landon Fuller continues working on Mustang port to Mac OS X. It’s been more than three weeks since Leopard has been released, and since Eric’s timeline doesn’t seem to hold (and Apple used some very questionable wording in the Tiger’s update for JDK 5.0 and 1.4.2), it looks like a promising development. What’s even more interesting is the fact that Landon has shown a Swing-based game running on FreeBSD’s port :)
- Tim Dalton shows how to harness Swing to build user interfaces in Scala. Combine this with the similar work in Grrovy from Andres and a bug recently opened on Substance that shows Swing being used in Jython UIs, and you might think that Swing is becoming to cross-platform UIs as what JVM is becoming to cross-platform languages. A solid base to use instead of reinventing the wheel.
- David Gilbert has announced release 1.0.7 of his JFreeChart library.
- Davide Raccagni has announced release 3.0 of his A03 look-and-feel.
- Not necessarily a strictly Swing link – kind folks from EasyRGB.com have put together a list of color conversion algorithms between a sizeable collection of color formats.
Carsten says in the comments to my previous posting:
all very nice and well, but from a business point of view right now the only interesting LnFs for me are Gtk and Windows XP. why are you missing both those two of all LnFs? makes me wonder…
Allow me to reiterate the last section in that entry:
i can go on and on with the screenshots, but you get the point. It can run under any core or third party look-and-feel without any special tricks in the application code and without writing any LAF-specific rendering
And to illustrate this, here are the components under Windows look-and-feel in Windows XP:

And the same components under GTK look-and-feel in Ubuntu 7.10:

As you can see, these look-and-feels are fully supported, including matching the fonts, desktop text rendering hints and dynamic layout that scales and adjusts with the font settings.
After quite a few months of preparations and planning, the Flamingo component suite project has a formal vision. Here is the list of goals for the version 3.0 that will be released in February 2008.
- To provide a small and cohesive set of powerful UI components that allow creating modern applications that provide visual functionality similar to or superseding that of Vista Explorer and Office 2007.
- To provide out-of-the-box consistent look across existing and future core and third-party look-and-feels with any specific application or implementation coding.
- To allow third-party look-and-feel vendors to change the appearance and behavior of the components according to the functionality of the specific look-and-feel (for example, animations).
- To respect the DPI settings of the current look-and-feel, scaling the components as necessary to account for different base font sizes.
- To follow the core Swing guidelines in the external APIs and the internal implementation details to ease the learning curve for users, developers and look-and-feel implementors.
- To provide clean and maintainable blueprints for creating custom production-ready third-party Swing components.
In order to meet these goals, the following changes will be made for the first source and binary drops of Flamingo 3.0dev that will be available early next week:
- The minimum requirement for the release 3.0 will be JDK 6.0.
- Components that do not conform to the first goal (such as wizard, file viewer and message dialog) will be removed from the distribution.
- The package structure, public APIs and class names will be changed to conform to the last goal.
In doing so, i’m following the three principles outlined by Seth Godin for small business success:
- Removing the functionality that was either partially or poorly implemented and not ready for production use.
- Willing to introduce binary incompatibilities and higher minimum requirements for greater long-term gain for both the project and the community.
- Believing that while other component vendors do not provide the target components, they cover the majority of other functionality required from modern Swing applications.