Spot the difference

November 21st, 2007

This post contains six images, three in Group A and three in Group B. Are you able to spot what’s different?

Group A, screenshot 1:

Group B, screenshot 1:

Group A, screenshot 2:

Group B, screenshot 2:

Group A, screenshot 3:

Group B, screenshot 3:

Watch this blog tomorrow for more details. Happy guessing.

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.