The release candidate for version 3.0 of Flamingo component suite (code-named Deirdre) is available. The goal of this project is 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. The components provide consistent visuals under the existing core and third-party look-and-feels, respect the DPI settings of the user desktop and follow the core Swing guidelines in the external APIs and the internal implementation details.

The component suite includes:

The project is licensed under BSD license and requires JDK 6.0. You can see the demo applications here. The binary and source bits are available here. The final release is scheduled for February 18.

Here are some Swing links that you might have missed during this week:

  • Christopher Deckers writes about the new functionality in drop 0.9.3 of his DJ Native Swing project. The main focus is on the possibility to mix heavyweight and lightweight components with lightweight components on top, to change their Z-order or re-parent them.
  • The new Metawidget project led by Richard Kennard announced its first drop. The stated goal of the project is to create UI components by inspecting existing back-end architectures (beans, annotations, XML config files). The target UI frameworks include Swing, JSF, Struts and Android, and it is possible to add support for more.
  • froglogic announced release 3.3 of their Squish UI testing tool. Main new features relevant to Swing development include support for testing mixed Swing / SWT applications, applets and WebStart applications.
  • Jan Haderka writes about the planned schedule for drop 0.9.2 of SwingX. The current timeline is late February or early March. Are we talking about the first stable release for JavaOne? :)
  • Philipp Meier shares a tip on writing cross-LAF cell renderers, based on an example of a combobox under the Nimbus look-and-feel.
  • Vaclav Pech is a new voice in the Groovy community that uses Swing as the “native” UI toolkit. His entries on binding and multithreading show a few examples of conciseness and expressive power of SwingBuilder. Now, if only my action listeners were all that simple…
  • Andres Almiray continues his tutorials on GraphicsBuilder. The second part talks about shapes and outlines.

The breadcrumb bar component from the Flamingo component suite has been mentioned a few times in the past, and now the official documentation has been reworked to reflect the current stable APIs. Here i will give a short overview of some of the main features.

Breadcrumb bar is a modern component that plays important part in Windows Vista Explorer and many web sites. It allows the user to keep track of his location within a program or document, efficiently utilizing the available screen estate. In the following screenshot, the file viewer panel is driven by the breadcrumb bar that navigates the local file system:

Breadcrumb bar can be used for navigating any tree-based structure, such as an SVN repository. In addition, Flamingo provides a utility class that wraps an existing JTree or TreeModel and exposes it as a breadcrumb bar with little additional programming. Here is the list of available implementations:

The org.jvnet.flamingo.bcb.BreadcrumbBar is the base class that provides the skeleton implementation of breadcrumb bar component. The org.jvnet.flamingo.bcb.core package provides specific implementations targeting a few popular structures. These are:

  • BreadcrumbFileSelector for traversing a local file system.
  • BreadcrumbSvnSelector for traversing a local or remote SVN repository.
  • BreadcrumbMultiSvnSelector for traversing a number of local or remote SVN repositories.
  • BreadcrumbTreeAdapterSelector for wrapping an existing JTree or TreeModel.

The detailed documentation has more information on wiring the core breadcrumb bar components to other application panels and on implementing a custom breadcrumb bar.

Here are some Swing links that you might have missed during this week:

  • Chris Campbell introduces Effects Framework, the third major component of Scene Graph project. Some of the effects seem to be based on Romain’s original work on new blending modes, and some look to bring Photoshop-based functionality to Java and JavaFX applications.
  • Speaking of the JavaFX focus in the upcoming 6.0 update N, there are two very interesting bug reports in the bug parade. 6656651 talks about native font rasterizing (at least on Windows platform) and 6655001 hints on support for translucent and arbitrarily shaped top-level windows, backed up by hardware acceleration on Windows Vista.
  • The Groovy community continues charging ahead with wrapping complex Java2D code in simpler builders. Andres Almiray announces release 0.4.5 of GraphicsBuilder with support for more than 60 filters. Two examples that show the power of JHLabs filters and the simplicity in which they are exposed in GraphicsBuilder can be found here and here. Andres also kicks off the first part of his tutorial on DZone, and Dave Cherry rounds up with the support for JFreeChart library.
  • Nazmul Idris continues his tutorials on SwingX components. This week he features the tutorials on task pane containers and busy labels.
  • Jesse Kuhnert writes a rather misguided rant about Swing. The three points that he mentions as Swing’s worst parts are quite easily addressed. The core layout managers are indeed terrible – but what about the great third-party layout managers? A possible analogy for the web development would be doing everything in pure HTML (and its deficiencies with using tables for everything) instead of using much more flexible CSS layouts. The next point is about rendering hints and has been addressed in Chet’s blog. One can also employ more advanced techniques such as bytecode injection. And since when web developers had access to rendering hints? The last point is about signals and slots. Not sure how this relates to Swing. Perhaps something like Event Bus project?
  • Fabrizio Giudici continues one of the points touched on in the previous item. His post shows how he is using bytecode injection to add property change support to Java beans.