Point of Sale (POS) systems are usually deployed at retail businesses such as restaurants or grocery stores. Most modern POS systems feature a touch-screen virtual computer that does not have keyboard or mouse. As such, it is operated by navigating through the available menus / features via on-screen selections. Due to the very nature of operating environment, these selections are done mostly manually (with fingers touching the screen). Here is how a sample POS system looks like:

And here is a sample screen of a POS system (click to see full size):

Since pressing your fingers on the screen is the only way to operate a POS system, all the controls need to be extra large.

I have already touched on subject of high-DPI support in Substance look-and-feel (part 1, part 2, part 3). Since the vast majority of Substance visuals are done with vector-based graphics, it should be able to scale to any font size. The real life, however, is not so simple and there are a lot of visual glitches that become apparent only at large scale values.

Here is a screenshot of an editable combobox using 72 pixel font under Substance 4.2. Note the clipped text, the gray margin around the text field editor and cap / join of the arrow icon:

And here is the same editable combobox under Substance 4.3:

Here is a screenshot of an icon button using 72 pixel font under Substance 4.2. Note the icon text gap, focus ring touching the text and the corners radius:

And here is the same button under Substance 4.3:

Here is a screenshot of a radio button using 72 pixel font under Substance 4.2. Note the checkmark text gap, focus ring weight, focus ring corner radius and the outer edge of the checkmark:

And here is the same radio button under Substance 4.3:

And finally, here is a screenshot of a checkbox using 72 pixel font under Substance 4.2. Note the checkmark text gap, focus ring weight and the focus ring corner radius:

And here is the same checkbox under Substance 4.3:

The latest development drop of Substance 4.3 has the first support for very large font sizes (which come with their own set of visual pitfalls, as illustrated above). It is in feature freeze state, with release candidate scheduled on March 31st, and the final release scheduled on April 14.

If you are interested in the topic of high-resolution monitors and the issues that they pose for UI applications in general, and for Swing in particular, please consider coming to a birds-of-feather session that i will be presenting with Mike Swingler (of Apple’s Swing team) at this year’s JavaOne. It is a little late (21:30 on Tuesday), but hopefully it will be worth it. Looking forward to seeing you.

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

  • Thierry Lefort shows how to include table cell styling (foregroud / background colors) in the copy / paste operation. He also shows how to use a single view with highlighting and filtering on multiple SwingX components.
  • The OpenJDK community innovators’ challenge has two Swing-related proposals. Clemens Eisserer proposes an XRender pipeline for Java2D, bringing hardware acceleration to the backbone of Swing painting. Roman Kennke and Mario Torre propose restructuring of AWT and Java2D to enable easier porting of AWT to new platforms.
  • Alex Ruiz announced release 0.9 of the FEST-Swing library for functional Swing testing. One of the major internal changes to the library is first support for testing Groovy-based UIs.
  • Hans Muller confirms what many have already guessed. His e-mail on the users mailing list of AppFramework (reference implementation of JSR 296) confirms that the development of this project has been dead since last November and will continue to be so through this summer. The subsequent discussion on the mailing list indicates that it is quite unlikely that somebody will step up and be able to provide leadership that is much needed for JSR-level projects. The inclusion in JDK 7 looks like it’s in jeopardy as well.
  • John O’Connor has an article on Beans Binding (reference implementation of JSR 295). Unfortunately, these two projects are twin victims of JavaFX for the better part of this year, and one could only hope that JavaFX will live up to its promise and to the investment in engineering resources that have been subverted to it.
  • Collin Fagan has an article on the intricacies of JTree and TreeModel APIs. The main reason for these is the fact that Swing has too many ways to accomplish the same thing (instead of one “true” way that may not sit well with “gurus”, but makes sure that the learning curve is much less steeper and the code is much more homogenic). I have addressed this issue last June.

Looks like this year brings a renewed interest in the Synth-based look-and-feels. Synth was introduced back in JDK 5.0, and it was marketed as one of the major upgrade reasons. The marketing would have you believe that every respectable designer will jump in and start cranking out sleek and polished Swing look-and-feels. Unfortunately, Synth was not tested to be well suited for this task, and there is only one production-ready family of look-and-feels that is based on it. Even then, its developers acknowledge that the base Synth implementation is ridden with multiple bugs.

However, things are changing for the better with Nimbus, the new Synth-based look-and-feel that will be part of JavaSE 6 update 10. While originally it was said to be image-based, its developers have settled for mostly Java2D-based rendering, fixing scores of core Synth bugs along the way. Jasper Potts (one of Nimbus developers) had a very interesting announcement a few months back, saying that they are working on a designer tool for Nimbus. While the full details will most probably be revealed at this year’s JavaOne, the tool allows designing the visuals in a Photoshop-like tool (with support for layering, gradients and effects). Then, the tool generates the Java2D code that produces the matching visuals at runtime.

This tool was not the first attempt at Synth designer. Romain Guy had a prototype of such a builder back in 2005. Fred Lavigne worked on such a builder from 2005 to 2006. After that, Patrick Forhan has taken Fred’s code with the intent of continuing the development, but it appears that the initial check in in September 2006 was also the last one. Finally, Luan O’Carroll has a Synth builder in his XUI framework (this branch has not seen any activity in the last six months).

Now, we have another attempt at writing a Synth designer. This time it comes from EaSynth that has announced the availability of version 1.00. While the tool itself is not free, the base EaSynth look-and-feel is available under the Apache license. While any new look-and-feel is welcome, at least for now it looks quite rough around the edges, especially compared with the existing Synthetica themes.

The java.net site has just published my article on translucent and shaped windows, and it is one of the reasons why i have been a little quite on this blog. The two previous entries have shown simple usages of the shaped and translucent windows:

While this has a lot of potential, it is not immediately clear how it can be applied to the real-life Swing programs. The java.net article tries to explore this area a little bit further and touches on three examples:

  • Translucent heavyweight tooltips
  • Fading heavyweight tooltips
  • Real time translucent reflection on a top-level window

The fading tooltip is my favorite at the moment. It shows the true potential of this functionality in providing a smooth user experience, especially in the context of modern UIs that use rollover and selection fades. The real time video reflection is also quite interesting, especially for the “coolness” factor.

The full sources can be found in the CVS repository of the companion PushingPixels java.net project.

If you have more ideas for window translucency, let me know in the comments.

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

  • Thierry Lefort published an update to the lazy loading tree. It now includes a single expansion listener and better model / controller separation.
  • Alex Ruiz will present a JavaOne session with Yvonne Price. It will talk about GUI testing and their FEST library.
  • Jeff Friesen has an overview article about the AnimatingCardLayout project that provides animations on top of a usual core card layout. I have already blogged about the various approaches to the layout animation, and the last year hasn’t changed my opinion. These are nice to have, but almost never used. An important note on the specific project – it has been inactive since December 2004, so if you find a bug or want to file an enhancement, you’re on your own (the project license is BSD).
  • Christopher Deckers announces release 0.9.4 of DJ Native Swing library. This brings improvement to stability and two new components, JVLCPlayer and JHTMLEditor.
  • Christophe Le Besnerais writes about his experiments in colorizing Swing UIs. The code has an interesting twistin that it allows colorizing only some parts of the interface.
  • Pavan Kumar explores a technique of showing progress without blocking the entire UI. Building on the previous work by Alexander Potochkin, it is a nice idea, but i found that the test application is not working as expected. While the table is indeed not blocked by the tree and shows that a selected cell is editable, i couldn’t type anything in until the tree was unblocked.
  • Dave Cherry is working on wrapping the JFreeChart library in a Groovy builder. The code is being developed on top of the GroovyChart library.
  • Andres Almiray has a busy Groovy week. He announced release 0.5 of his GraphicsBuilder library and also published the fourth part of the Groovy Zone tutorial.

Finally, quote of the week belongs to James Gosling:

Even though it’s a Java game, it’s only available for Windows and OS X – they use QuickTime for Java. (we’re trying to get our cross-platform media story together, but it’s tough… [codecs are easy, we’ve got piles of them: it’s all about patent royalties on free software :-( ])

Let’s compare this with QT Jambi:

Qt and Qt Jambi 4.4 gets full-blown multimedia support through the Phonon framework adopted from KDE. This gives easy access to playing and manipulating movies and music in all the nice file formats for which the underlying media framework has codecs. The framework defaults to using Gstreamer (Linux), Microsoft DirectShow (Windows) and Quicktime (Mac OS X).

So, another cross-platform UI toolkit is showing that it can be done and that it will be officially released this year