Hi I'm meandering through the codebase, admiring the succintness and absence of hacks (a nice change from Swing), and I'm accumulating comments as I go.
For the Component class: - what's with the naming of ComponentClassListener? shouldn't that be FocusListener? - and shouldn't the static field Component#componentClassListeners live on instances of the Window object? Focussing is a per-window thing. - nothing seems to be adding to Component#components. I think Component#components it is there to allow runtime theme changes??? A much lighter-weight approach would be to track the current Window objects, and then run down the containment hierarchy. - Component#focusedComponent should be a field of Window, since each Window can have it's own focussed widget. - Component#decorators should probably live inside Component.DecoratorSequence - Component#handle seems to be only useful for debugging - Component#preferredSize is a cached value - why is it necessary to cache this value? Is it expensive to retrieve? - Component#userData is going to be hard to use. It is very handy to be able to stash extra info on a component, but when multiple libraries all want to do this, it quickly gets out of hand. A better solution would be a map with methods like get/putUserData(Class key) where key is the Class of the client object. Regards, Noel.
