GWT is definitely a giant leap forward as far as developing Ajax/Javascript applications in a single environment (Java, in this case), but there are still some places where you can see the road peeking through the floorboards, i.e. you see a bit too much CSS, XHTML and Javascript for my taste. Also, lots of the machinery of GUI application development was missing from GWT. This isn’t meant as a criticism of Google or the GWT team. They intentionally released a bare-bones SDK to the world in the hopes that volunteers and others would jump in and flesh it out.
It was only a matter of time until someone implemented a window manager for GWT. Enter GWm. The objective is to provide all of the features and functionality that make up a desktop. Right now GDesktopPane and GInternalFrame are available to allow for the creation of a Multi Document Interface (MDI). Ultimately window behaviors such as docking would be supported.
Just a sampling of some of the major changes from their 0.5 release:
- GWT-implementation of the GInternalFrame (no external js-libraries)
- Free frames and desktop-managed frames
- Dialog and Input frames
- added behaviour capabilities
- event-catching and debug window
- bug-fixes
- added samples with source code
Behaviour capabilities:
- frames can be dragged and resized
- a frame caption has 3 buttons: minimize/restore, maximize/restore, close
One of the nicer things already present in this library is the concept of window themes. Essentially you create a CSS with a few styles to define borders, corners and buttons and can thus style the chrome and look and feel of the windows. Yeah, it’s only CSS, but there’s a reason people invented the concepts of themes and look-and-feel managers for GUI’s: who could bear to style every single control and widget in a UI? So while the implementation is unexciting, the organizational principle is sweet and useful.
You’ll find that when you have these nested windows that the performance will be a little pokey and moving the window can be a little jagged. Ah, well. Intermediate forms (see Thomas Kuhn, The Structure of Scientific Revolutions for an explanation of what I mean by “intermediate forms”) are typically not fully formed or baked. They are nonetheless welcome guests. As browser Javascript performance continues to improve and the various frameworks flesh out their missing parts to become full GUI desktops, the task of developing Ajax applications will become ever easier.

