Swing and Point of Sale applications
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.
Related posts:
- Native text rendering in Swing applications – how does it work? Two weeks ago i wrote about the first drop of Bramble plugin for Substance look-and-feel,...
- Native text rendering in Swing applications Yesterday i posted six screenshots divided in two groups and asked what is the difference....
- Native text rendering in Swing applications – ready, steady, go! The subject of native text rendering in Swing applications has been introduced on this blog...
- New Magma skin for Swing applications It’s finally time to release one of my favorite new skins for Swing applications. The...
April 8th, 2008 at 6:10 pm
Firstly my apolgies foFirstly my apologies for taking so long to reply to this post – I’ve been away on leave. We actually use the substance look and feel in our java based point of sale system. We really appreciate all the work you have put into substance. The look and feel works very well on site.
That said there are a few further modifications that could be made to the substance look and feel that would make it better suited for POS applications:
1 – Provide a cut stripped down but fast theme. I have noticed that different options on substance have a big impact on the themes CPU usage. For example setting a watermark slows everything down, as do buttons with rounded corners. It would be great if you provided some sort of ‘Basic’ theme out of the box that was optimized for resource constrained environments. Many POS systems are just not as powerful as normal desktop machines – for example we are looking at running our system on UMPCs.
2 – Allow the control scaling and font scaling to be controlled independently of each other. Scaling up the application controls such as the tick mark, scroll bar buttons, etc is great, but in many cases we just need larger controls, but not necessarily larger fonts. For example most of our users are only 1 or 2 feet away from the screen so they can read text fine, but is is very hard to use controls such as tickboxes or scroll bars, because they are two small to press on.
3 – Allow a way to globally turn off rollover effects. I submitted a bug for this a while ago but it doesn’t look like it is a priority. Having rollover effects makes no sense touch screens and just chews up memory and CPU usage.
Once again, thanks for all your work on substance!
- Luker taking so long to comment on this post -
April 8th, 2008 at 8:39 pm
Hi, Luke. Great to hear back from you. To your points:
1. I prefer not to provide such a theme, because it is really everything else *but* the theme itself. It is a matter of choosing a watermark and painters that are fast enough for the target platform. I do intend to work on a performance profiler that will provide comparative data for different types of watermarks and painters, so that the applications will create their own skins that are targeting performance.
2. This is not currently planned, as i am very comfortable with the current approach to scale all visuals with the desktop / control font size.
3. The original report was on a different issue, and i thought that we agreed that there is a satisfactory workaround that does not require adding yet another client property to Substance. I do plan to add an extra API to the FadeConfigurationManager to disable a specific fade kind on all controls in the next Substance release.
Thanks
Kirill
April 9th, 2008 at 6:06 pm
Hey,
1 – Yes you are quite right – sorry I mean to say Skin, not Theme. Its a combination of the WaterMark, Shapers and Painters that slow things down. It would be great if substance included a fast skin right out of the box that used simple but quick shapers, painters, etc.
2 – Fair enough!
3 – Yep, that is quite right. If anybody is interested you can disable rollover effects by coming up by calling the registerComponentStateTheme methods on SubstanceComplexTheme. I can still wish for such a thing to be included by default in substance though :-) But I guess you have to pick and choose what you spend you time on and disabling rollovers would only be useful to a minority of customers.
April 11th, 2008 at 2:43 pm
Luke,
As i already said, my plans are to provide benchmark results for different types of painters and watermarks, so that applications can consult them and create “performance”-oriented skins. I also do plan to work of profiling paining bottlenecks to make Substance faster. In addition, FadeConfigurationManager will have an API to disable a specific fade kind on all controls.
Thanks
Kirill