A multiple document interface (MDI) is a graphical user interface in which multiple windows reside under a single parent window. Such systems often allow child windows to embed other windows inside them as well, creating complex nested hierarchies. This contrasts with single document interfaces (SDI) where all windows are independent of each other.
In the usability community, there has been much debate about whether the multiple document or single document interface is preferable. Software companies have used both interfaces with mixed responses. For example, Microsoft changed its Office applications from SDI to MDI mode and then back to SDI, although the degree of implementation varies from one component to another. SDI can be more useful in cases where users switch more often between separate applications than among the windows of one application.
The disadvantage of MDI usually cited is its lack of information about the currently opened windows: In MDI applications, the application developer must provide a way to switch between documents or view a list of open windows, and the user might have to use an application-specific menu ("window list" or something similar) to switch between open documents. This is in contrast to SDI applications, where the window manager's task bar or task manager displays the currently opened windows. However, in recent years it has become increasingly common for MDI applications to use "tabs" to display the currently opened windows, which has made this criticism somewhat obsolete. An interface in which tabs are used to manage open documents is referred to as a "tabbed document interface" (TDI).
Another option is "tiled" panes or windows, which make it easier to prevent content from overlapping.
Some applications allow the user to switch between these modes at their choosing, depending on personal preference or the task at hand.
Nearly all graphical user interface toolkits to date provide at least one solution for designing MDIs, with an exception being Apple's Cocoa API. The Java GUI toolkit, Swing, for instance, provides the class javax.swing.JDesktopPane
which serves as a container for individual frames (class javax.swing.JInternalFrame
). GTK+ lacks any standardized support for MDI.