This month's Java Toolbox continues the object-oriented design/GUI theme by looking at a Collection wrapper that makes it easy to present a visual proxy, as I described in the September Java Toolbox. The wrapper, called a Bag, works just like a Collection -- it implements the java.util.Collection interface. It can, however, create a visual proxy for itself when asked.
The associated proxy can display the list of elements as a list; a button that, when pressed, pops up a frame containing the
list; or a combo box. The display strategy is automatic, controlled by the size of the proxy. The list is used if there's
enough space, the button is used when space is tight, and the combo box is used in an in-between situation. Moreover, several
such proxies can simultaneously display the same underlying Collection (presumably, on different screens). When the Collection is changed at the model level -- by someone adding or removing a member, for example -- all the proxies will redraw themselves
to reflect the change. The notion of selection is supported: When a user selects an element from the UI, a model-level object
that's registered as a listener will receive notification. If several proxies are displayed, they can stay in synch with each
other. If you select from one, the selections in the others will change as well. (This behavior isn't required, however.)
You may want to download the code from my Web site (see Resources) and play with this thing a bit to see how it works. Figure 1 illustrates three visual proxies simultaneously displaying the same underlying Collection. The proxy on the left is large enough to have represented itself as a list. The one at the top is a bit smaller, so it has
represented itself as a combo box, while the one in the bottom right is smaller still, so it has represented itself as button,
which when pressed pops up the frame window that's shown. (The button is disabled as long as the frame window is visible;
it's re-enabled automatically when you close the frame.) If you resize any of these windows, they'll transmogrify into one
or the other of these three forms as they get larger or smaller. Moreover, if you select a line in any of them, the other
two will change to reflect that selection.

Figure 1. The Bag's visual proxy in action
This sort of dynamic adaptability is essential when implementing user interfaces using the architecture that I described in the July and September columns (which you should read before proceeding -- I assume that you're familiar with the architecture I presented in those articles). In this architecture, a control layer builds a presentation from visual proxies of attributes that are provided by an abstraction-layer object. The abstraction layer cannot know the context in which the proxy will be asked to display itself, so the proxy must accommodate whatever space is available automatically.
ShoddyBy Anonymous on July 27, 2009, 10:28 amShoddy. Shoddy. Shoddy. Shoddy.
Reply | Read entire comment
View all comments