Turn Dialogs into Frame-Anchored Sheets #44
Chapter 6, Transparent and Animated Windows
A sheet doesn’t have a close box
Dialog close boxes are one of the most hateful and stupid concepts in
Windows and its many Linux imitators. What does the close box mean?
Cancel? The default option? What does it mean when the dialog has
multiple options of equal plausibility and thus no default? Perhaps the
worst thing about the close box was back in the AWT era when Java
developers—too lazy to add and wire-up an OK button to their dia-
logs—just figured users could dismiss the dialog with the close box.
Mac OS 8 and 9 dialogs didn’t have close boxes, so when a Java applica-
tion brought up such a dialog, the application blocked itself forever. Duh.
Sheets mean having to click one of the provided buttons, so the user’s
choices are unambiguous.
A sheet is used to block one window
This is an obvious side effect of being visually tied to a single window,
but that’s probably the most common case. As a side effect, this gives
greater prominence to dialogs that block all windows for a single appli-
cation (“Are you sure you want to Quit and lose all unsaved changes in
all documents?”) and dialogs that block all applications (“Are you sure
you want to Shut Down?”).
So, if you agree that it’s an excellent GUI concept, the next question is “how
do I mimic sheets in Swing?”
Use the Glass Pane
One way to imitate the Mac OS X sheet is to use the glass pane—a layer in
LayeredPane used by all RootPaneContainers, including JApplets, JFrames,
JInternalFrames, JWindows, and JDialogs. In terms of z-order—the ordering
of layers on “top” of one another from the user’s perspective—the glass
pane is “above” the content pane and the menu bar in the
LayeredPane. It is
Figure 6-7. Sheet in Mac OS X Safari browser