This criteria sets a bench mark. Complex GUIs require sophisticated software paradigms, of which object-oriented design lends itself very well. I don’t find much interest in these microwave-dinner-like AJAX frameworks that offer amazing widgets that are completely inflexible once you want to tweak them.
Looking at the following Java based RIA frameworks, I will only be looking at their “showcase” screen. That is, their demo which contains all the GUI widgets.
This article will also only be looking at a certain set of components. For this article I don’t want to spend more than 5 hours comparing these frameworks. If you start comparing each of these frameworks on a deeper level you will be analyzing forever.
So let’s ignore the basic widgets like text fields, and concentrate on some of the more complex features such as tree, table, tree-table, layout management and dialogs. I would say these are among the most importantly complex features of a GUI framework.
First up Icefaces, a framework built upon JavaServerFaces and purports to offer a richer GUI experience. At first sight the components look quite pretty. The look and feel has an air of arctic chill about it, with a touch of post modern in its Picassoesque logo.
Table : Can’t move columns around. No example of a table in a scrollpane. No example of an editable table. This is fairly standard stuff that is missing. Being able to do advanced row selection with CTRL and SHIFT works quite well but is quite sluggish. It would be nice to see some hour glasses.
Tree : Seems a little sluggish. I think every expand/contract action is hitting the server and loading the data. Maybe that is configurable. It is also not key controllable. That is I cannot move through the tree with my arrow keys like any normal tree.
TreeTable : IceFaces has Expandable Table. It looks fine although there is no evidence of custom rendering. It also behaves sluggish like the tree indicating that there is no client caching happening.
LayoutManagers : No real advanced layout management on offer. It all looks pretty much like what you could do with a HTML table.
Dialogs : Called a ‘Popup panel’. Fairly simple. No option to resize is a real disadvantage, and prevents you from seeing how layout management would respond due to a resize.
First appearance: looks light and fluffy like a Kleenex commercial. However beneath the breeziness lurk some pretty heavy duty widgets. It also has an admirable example of a spreadsheet, which screams out why some desktop applications should never make the jump into the browser world.
Tree : ZK is keen to show loading on demand. It appears to cache data in the client, and is controllable with arrow keys. No example of tree in a scroll pane – I don’t really see a ‘pageable’ tree as being a solution. (Could ZK be trying to hide a performance bottle neck?)
Tree-Table : ZKs answer appears to be a ‘Tree Model’. Another example is a ‘Grid Hierarchy’ which seems much more sophisticated with embedded components.
Table : Can edit strings/boolean/date and seems to be excellent. Columns cannot be moved around. There are some other very attractive table components, such as accordion expandable and contractable tables, and sophisticated sorting menus on column headers.
Layout Managers : Excellent number of layout managers. ZK has a high emphasis on portal style layout managers which it does quite well.
Dialogs : Moveable, but not resizable. It would be nice to check out the inner layout management at work.
Next up is Vaadin. With a Scandinavian sounding name, images are conjured up of beauty combined with functionality, like an IKEA showroom. And on first glance the GUI components presented are quite beautiful without undermining their functional purpose.
Tree : Looks fine. It is arrow key navigable. But I can find no example of a tree in a scrollpane or using large amounts of data. What is it with these frameworks and displaying lots of data in their trees?
Tree-Table : I can’t seem to find any example in their showcase.
[UPDATE: Tree-table exists. See comments section]
Table : The table examples are very good. There are some examples of large data sets. It doesn’t seem to want to cache properly, or refreshing is pretty slow. A useful label at the top indicates to the user the rows currently being loaded. No example of table cell editing, but columns can be moved around.
[UPDATE: Table cell editing exists. See comments section]
Layout Managers : Very good and can satisfy any kind of crazy layout this side of GridBagLayout hell. The ‘application style’ layout demonstrates its layout in a dialog : resizing and moving is pretty sluggish, but the internal mechanics of the layout manager work correctly.
Dialogs : Look very nice, work well, and are nicely resizable.
Tree : The GWT tree is very smooth. Caching appears to be very good. Finally a tree that can handle lots of data. But why no example of a tree in a scrollpane? A more complex example shows tree cell editing (well for a Boolean value at least).
Tree Table : Can’t seem to find any example.
Table : The table example isn’t really anything. You have to look at ‘Cell table’. The table cells are editable, but there is no example of a table in a scroll pane. Focus traversal policy is also pretty poor in this component.
Layout Managers : Dock Panel offers a compass type layout. The other layouts don’t offer much more sophistication than HTML table layouts.
Dialogs : Very poor examples in GWT. There is a picture of a guy with a light saber in dialog. Its modal but you can’t resize it. Nothing much else to see.
Echo2 (Echo3 still in Beta).
Tree : Has no example of a tree.
Tree-Table : No tree, so no tree-table to be seen.
Table : Has a table where you can select rows. No example of sorting, scrollpane, cell editing.
Layout Managers : To me the layout management that I can see is too similar to a HTML table (which it probably is in the background).
Dialogs : Dialogs are fine and resizable.
In summary, Echo2 seems to have barely any complex GUI components in its showcase, and the fact that no significant work has been done to move Echo3 out of the beta stage, makes it a risky choice. Icefaces definitely has a lot of sophisticated components on offer, but it seems to be too locked into the server world. The most trivial user interactions require calls to the server creating a sluggish user experience. It doesn’t feel like a RIA framework.
It really comes down to GWT, ZK and Vaadin. GWT really suffers from the fact that its showcase is fairly sparse. What it has on display is fine, and its tree is the most highly performing out of all the frameworks. However the dialogs and layout management on display are pretty dismal. Vaadin has exceptional layout management, but sadly there are no examples of cell editing in Vaadin. Based entirely on what I have seen in all the above showcases, I think ZK has impressed me the most.